欢迎来到天天文库
浏览记录
ID:39619968
大小:19.05 KB
页数:7页
时间:2019-07-07
《深入浅出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
此文档下载收益归作者所有