⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000002.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人:&nbsp;raner&nbsp;(lilo),&nbsp;信区:&nbsp;Linux&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;NACHOS论坛(2)&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木调试站&nbsp;(Thu&nbsp;Jun&nbsp;&nbsp;4&nbsp;16:44:24&nbsp;1998)&nbsp;<BR>&nbsp;<BR>作&nbsp;&nbsp;家:&nbsp;solmon&nbsp;(所罗门王)&nbsp;on&nbsp;board&nbsp;'Unix'&nbsp;<BR>题&nbsp;&nbsp;目:&nbsp;NACHOS论坛(2)&nbsp;<BR>来&nbsp;&nbsp;源:&nbsp;&nbsp;鼓浪听涛站&nbsp;<BR>日&nbsp;&nbsp;期:&nbsp;Thu&nbsp;Mar&nbsp;&nbsp;6&nbsp;23:03:35&nbsp;1997&nbsp;<BR>出&nbsp;&nbsp;处:&nbsp;<A HREF="mailto:mysu@JingXian.xmu.edu.cn">mysu@JingXian.xmu.edu.cn</A>&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第二章&nbsp;&nbsp;&nbsp;&nbsp;进程管理&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;在Nachos的教程里,第一个课程作业是进程管理,它将介绍进程的概念和并发性问&nbsp;<BR>题.Nachos的设计者提供了一套基本的进程管理系统和一个信号量的实现.让学生们做&nbsp;<BR>的课程作业是用信号量实现锁和状态变量.然后利用这些同步原语解决一些并发性问&nbsp;<BR>题.例如实现一个简单的生产者-消费者问题,在实现中使用条件变量来表示缓冲区空&nbsp;<BR>和缓冲区满两个状态.&nbsp;<BR>&nbsp;&nbsp;&nbsp;对于那些刚刚学习编程的学生来说,理解并发性需要一个概念上的飞跃.Nachos的设&nbsp;<BR>计者认为,教授并发性的最好方法是让学生们能够直观地看到程序的并发行为,只有这&nbsp;<BR>样,学生们才能学会实现并发性程序的正确方法.这一章的设计正体现了这个思想.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Nachos中的进程管理有很多优点,学生们可以一条指令一条指令地跟踪进程切换的&nbsp;<BR>过程,既可以从外界观察者的角度,也可以从相关进程的角度观察,在一个进程切换到另&nbsp;<BR>一个进程的过程中发生了什么事情.Nachos的设计者相信,这个经历对帮助学生们解开&nbsp;<BR>并发之谜是至关重要的.其次,Nachos是一个可以工作的进程系统,可以让学生们在它上&nbsp;<BR>面编写并发性程序,并测试这些程序.在测试的过程中,学生们将发现许多过去没有注意&nbsp;<BR>到的问题.事实证明,即使是有丰富经验的程序员也觉得考虑并发性问题是很困难的.在&nbsp;<BR>一本广泛使用的操作系统教科书上,一个并发算法中就有一个错误,这个错误直到几年&nbsp;<BR>后才被发现.在Nachos的早期版本中,进程管理系统忽略了许多实际的问题,设计者以为&nbsp;<BR>学生们在课程的以后部分将学习到足够多的并发程序例子,他们会注意到这些实际的问&nbsp;<BR>题的,但是许多学生到了课程的最后阶段还犯并发方面的错误,所以现在的版本增加了许&nbsp;<BR>多实际问题的处理.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Nachos是一个多进程的操作系统,每个进程占用的处理机是Nachos宿主机的CPU而不&nbsp;<BR>是机器模拟部分模拟的CPU,也就是说Nachos实现的是真正的多进程系统,而不是只模拟&nbsp;<BR>用户的多进程.Nachos的每一个进程都有自己的堆栈,运行状态,还有一块内存用于保存&nbsp;<BR>进程放弃CPU时的寄存器内容.进程的状态有运行态,就绪态,阻塞态三种.进程的代码段&nbsp;<BR>和数据段是共享的,都用Nachos的代码段和数据段.用户程序的多进程是用Nachos内部&nbsp;<BR>的多个用户程序解释进程实现的.当用户程序要求生成一个新进程时,Nachos内核产生&nbsp;<BR>一个新进程,这个进程给用户程序分配内存空间,并把用户程序的代码段和数据段装入&nbsp;<BR>用户地址空间,然后解释执行用户程序.所以用户程序解释进程还有自己的用户地址空间&nbsp;<BR>和用户寄存器.这些进程在正文切换的时候还要保存或恢复用户地址空间和用户寄存器.&nbsp;<BR>&nbsp;&nbsp;&nbsp;Nachos为进程提供的功能有:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.生成一个进程(Fork),&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.使进程睡眠等待(Sleep),&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.结束进程(Finish),&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.设置进程状态(setStatus),&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5.放弃处理机(Yield).&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;进程系统的结构如图:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┏━━━━━━━━━━━━━━━━━━━┓&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┃&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用&nbsp;&nbsp;&nbsp;&nbsp;户&nbsp;&nbsp;&nbsp;&nbsp;程&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;序&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┃&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┣━━━━┳━━━━━┳━━━┓&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┃&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┃&nbsp;信号量&nbsp;┃&nbsp;条件变量&nbsp;┃&nbsp;&nbsp;锁&nbsp;&nbsp;┃&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┃&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┣━━━━┻━━━━━┻━━━┻━━━━┫&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┃&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread&nbsp;&nbsp;&nbsp;类&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┃&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┣━━━━━━┳━━━━━━┳━━━━━┫&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┃&nbsp;模拟中断&nbsp;&nbsp;&nbsp;┃&nbsp;&nbsp;&nbsp;正文切换&nbsp;┃&nbsp;进程调度&nbsp;┃&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┃&nbsp;&nbsp;&nbsp;模块&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┃&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;模块&nbsp;&nbsp;&nbsp;┃&nbsp;&nbsp;&nbsp;模块&nbsp;&nbsp;&nbsp;┃&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┗━━━━━━┻━━━━━━┻━━━━━┛&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;我们从下向上介绍进程系统的各个模块.模拟中断模块在机器模拟部分已作了介绍.&nbsp;<BR>正文切换模块中有两个与机器相关的正文切换函数,学生不能改变这个模块.正文切换&nbsp;<BR>过程依赖于具体的机器,这是因为正文切换过程中的寄存器保护,建立初始调用框架等&nbsp;<BR>等操作对不同的处理机结构都是不一样的.Nachos分别为&nbsp;DEC&nbsp;MIPS,&nbsp;SUN&nbsp;SPARC,&nbsp;HP&nbsp;<BR>PA-RISC,&nbsp;Intel&nbsp;386&nbsp;实现了正文切换函数.一个正文切换函数是&nbsp;<BR>ThreadRoot(int&nbsp;InitialPC,&nbsp;int&nbsp;InitialArg,&nbsp;int&nbsp;WhenDonePC,&nbsp;int&nbsp;StartupPC).&nbsp;<BR>其中&nbsp;InitialPC&nbsp;指明这个进程要执行的函数的入口地址,InitialArg是InitialPC的参&nbsp;<BR>数,StartupPC&nbsp;是进程首次占用处理机时立即执行的函数地址,WhenDonePC&nbsp;是进程最后&nbsp;<BR>结束时执行的函数的地址,ThreadRoot函数是用汇编语言编写的,它的执行过程是:&nbsp;<BR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -