深入浅出PINTOS

深入浅出PINTOS

ID:39619968

大小:19.05 KB

页数:7页

时间:2019-07-07

深入浅出PINTOS_第1页
深入浅出PINTOS_第2页
深入浅出PINTOS_第3页
深入浅出PINTOS_第4页
深入浅出PINTOS_第5页
资源描述:

《深入浅出PINTOS》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、深入浅出PINTOS     又名           零基础学PINTOS                         ——哈哈重在恶搞。温帅哥出品。忙活了一个周末,废寝忘食地啃特那保姆写的《现代操作作系统》,pintos的第一个实验才仅仅算是初见端倪。。。斯坦福阿斯坦福,你把这个pintos搞的这么难,坑爹阿!能独立完成这个实验的孩子你们伤不起阿!言归正传,把我知道的一点点pintos实验project1的做法全都抖落出来,分享一下。已经会的大牛不要嫌我嘚瑟阿。。。一、在pintos源码中找到最基本的概念:本次实验至少需要阅读thread.h,tread.c,

2、interrup.h,time.c这四个文件。pintos在thread.h中定义了一个结构体structthread,这个结构体就存方了有关进程的基本信息。 structthread {   tid_ttid;                         /*Threadidentifier.*/   enumthread_statusstatus;         /*Threadstate.*/   charname[16];                     /*Name(fordebuggingpurposes).*/   uint8_t*stac

3、k;                    /*Savedstackpointer.*/   intpriority;                      /*Priority.*/   structlist_elemallelem;          /*Listelementforallthreadslist.*/    /*Sharedbetweenthread.candsynch.c.*/   structlist_elemelem;             /*Listelement.*/ #ifdefUSERPROG   /*Ownedbyuserp

4、rog/process.c.*/   uint32_t*pagedir;                 /*Pagedirectory.*/#endif    /*Ownedbythread.c.*/   unsignedmagic;                    /*Detectsstackoverflow.*/ }; 大家不要被这么庞大的结构体所吓倒,其实他说的事情很简单,无非是这个线程的几个基本信息。值得注意的是enumthread_status这个枚举类型的变量,他的意思就是这个线程现在所处的状态。 enumthread_status {   THR

5、EAD_RUNNING,    /*Runningthread.*/   THREAD_READY,      /*Notrunningbutreadytorun.*/   THREAD_BLOCKED,    /*Waitingforaneventtotrigger.*/   THREAD_DYING       /*Abouttobedestroyed.*/ }; 还有一个最最重要的概念是中断。所谓中断其实分两种,一种是IO设备向CPU发出的中断的信息,另一种是CPU决定切换到另一个进程时(轮换时间片)发出的指令。我们现在处理第二种。pintos的中断在inter

6、rupt.h和interrupt.c之中。其中这个枚举类型intr_lverl会在后面被反复提到:  enumintr_level {   INTR_OFF,            /*Interruptsdisabled.*/   INTR_ON              /*Interruptsenabled.*/ }; 其实这个intr_level表达的意思更简单,就是有两个单词,intr_off表示关中断,on表示开中断。大家都知道,执行原子级别操作的时候,中断必须是关着的。 最后还要说以下,pintos是以ticks作为基本时间单位的,每秒有TIMER_FR

7、EQ个ticks:/*Numberoftimerinterruptspersecond.*/#defineTIMER_FREQ100//系统默认这个宏为100还有一点,pintos默认每一个ticks调用一次时间中断。换句话说,每一个线程最多可以占据CPU一个ticks的时长,之后就必须放手。 二、掌握thread的基本操作(函数):以下函数在thread.c中都可以找到。1.thread_current()获取当前当前的线程的指针。2.thread_foreach(thread_action_func*func,void*aux) 遍历当前read

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。