操作系统精髓与设计原理(原书第6版) 第三章 进程描述和控制 学习笔记(2)

                                     第三章 进程描述和控制

 


3.4 进程控制


1 两种模式:用户态与内核态:

用户态:非特权态。用户通常在该模式下运行。   

内核态:又称特权态、系统态、控制态。指的是操作系统的内核,这是操作系统中包括重要系统功能的部分。下表展示了操作系统内核中通常可以找到的功能。

2 使用两种模式的优势与问题

    优势:保护操作系统和重要的操作系统表(例如进程控制块)不受用户程序的干涉。

问题:(1)处理器不知道当前处于什么模式,(2)应该如何改变这一模式。

解决方案:问题1:程序状态字中有一位表示执行模式,这一位应某些事件的要求而改变。典型情况下,当用户调用一个操作系统服务或者终中断触发系统例程的执行时,执行模式被设置为内核态,当从系统服务返回到用户进程时,执行模式设置为用户态。

3 创建进程时包含的步骤:

1)给新进程分配唯一一个唯一的进程标识符。此时,在主进程表中增加一个新表项,表中的每个新表项对应着一个进程。

2)给进程分配空间。这包括进程映像中的所有元素。因此,操作系统必须知道需要多少空间(私有用户地址空间(程序和数据)和用户栈。可以根据进程的类型使用默认值,也可以在作业创建时根据用户请求设置。如果一个进程是由另一个进程生成的, 则父进程可以把子进程所需的值作为进程创建请求的一部分传递给操作系统。如果任何现有的地址空间被这个新进程共享,则必须建立正确的连接。最后,必须给进程控制块分配空间。

3)初始化进程控制块。进程标识符部分包括进程ID和其他相关的ID(如父进程的ID等);处理器状态信息部分的大多数项目通常初始化成0,除了程序计数器(被置为程序人口点)和系统栈指针(用来定义进程栈边界);进程控制信息部分的初始化基于标准默认值和为该进程所请求的属性。例如,进程状态在典型情况下被初始化成就绪或就绪/挂起;除非显式地请求更高的优先级,否则优先级的默认值为最低优先级;除非显式地请求或从父进程处继承,否则进程最初不拥有任何资源(I/O设备、文件)。

4)设置正确的连接。例如,如果操作系统把每个调度队列都保存成链表,则新进程必须放置在就绪或就绪/挂起链表中。

5)创建或扩充其他数据结构。例如,操作系统可能为每个进程保存着一个记账文件,可用于编制账单和/或进行性能评估。

4 何时切换进程?

    进程切换可以在操作系统从当前正在运行的进程中获得控制权的任何时刻开始。下表展示了将控制权交给操作系统的事件:

    系统中断:分为中断和陷阱。中断与当前进程无关的外部事件相关。陷阱与当前进程所发生的错误和异常条件相关。

          对于一般的中断,控制首先交给中断处理器,它做一些基本的辅助工作,然后转到与中断相关的操作系统例程。

          对于陷阱:确定错误或异常是否致命。如果是,改为退出,并发生进程切换;如果不是,操作系统的动作取决于错误的类型和操作系统的设计,其行为可以是试图恢复或通知用户。

         操作系统可能会被来自正在执行程序的系统调用激活。通常使用系统调用会导致把用户进程置为阻塞态。

    一般中断举例:(1)时钟中断:判断当前进程运行时间是否超过最大允许时间段(即时间片),若超过了进程切换到就绪态,调入另一个进程。(2)I/O中断:判断操作系统是否发生I/O活动。如果I/O活动是一个或多个进程正在等待的事件,操作系统就把所有相应的阻塞态进程转换到就绪态(阻塞/挂起状态转换成就绪/挂起状态),操作系统必须决定是继续执行当前处于运行态的进程,还是让具有高优先级的就绪态进程抢占这个进程。(3)内存失效:处理器访问一个虚拟内存地址,且此地址单元不在内存中,操作系统必须从外存中把包含这个引用的内存块(页或段)调入内存中。在发出调入内存的I/O请求后,操作系统可能会执行一个进程切换,以恢复另一个进程的执行,发生内存失效的进程变为阻塞态,当想要的块调入内存时,该进程被指为就绪态。

5 中断时指令周期的一部分。在中断阶段,处理器判断是否有未处理的中断请求,如果没有,继续取指令周期,如果有,需要进行以下工作:(1)把程序计数器置为中断处理程序的开始地址。(2)从用户态切换到内核态,使得中断处理代码可以包含有特权的指令

6 被中断的进程上下文环境包括什么?

    必须包括所有中断处理可能改变的信息和恢复被中断程序时需要的信息。因此必须保存处理器状态信息的进程控制块部分(包括程序计数器、其他处理寄存器和站信息)。

7 模式切换于进程切换是不同的。发生模式切换乐意不改变正处于运行态的进程状态,若要恢复上下文环境也只需要很少的开销。

8 进程切换的步骤:

1)保存处理器上下文环境,包括程序计数器和其他寄存器。

2)更新当前处于运行态进程的进程控制块,包括将进程的状态改变到另一状态(就绪态、阻塞态、就绪/挂起态或退出态)。还必须更新其他相关域,包括离开运行态的原因和记账信息。

3)将进程的进程控制块移到相应的队列(就绪、在事件i处阻塞、就绪/挂起)。4)选择另一个进程执行

5)更新所选择进程的进程控制块,包括将进程的状态变为运行态。

6)更新内存管理的数据结构,这取决于如何管理地址转换。

7)恢复处理器在被选择的进程最近一次切换出运行状态时的上下文环境,这可以通过载入程序计数器和其他寄存器以前的值来实现。


3.5 操作系统的执行


操作系统是一个进程吗?如果是,如何控制它?

1 无进程的内核:在所有的进程之外执行操作系统内核。通过这种方法,在当前运行的进程被中断或产生一个系统调用时,该进程的模式上下文环境被保存起来,控制权转交给内核。操作系统有自己的内存区域和系统栈,用于控制过程调用和返回。操作系统可以执行任何预期的功能,并恢复被中断进程的上下文,,这将导致被中断的用户进程重新继续执行。或者,操作系统可以完成保存进程环境的功能,并继续调度和分配另一个进程。,是否这样做取决于中断的原因和当前的情况。

 2 在较小的机器的操作系统中,常见的是在用户进程的上下文中执行几乎所有操作系统软件。其观点是操作系统从根本上说是用户调用的一组例程,在用户环境中执行,用于实现各种功能。

 

3 把操作系统作为一组系统进程来实现,主要的内核函数被组织成独立的进程,还可能有一些在任何进程之外执行的进程切换代码。该方法的优点:利用程序设计原理,促使持有模块化操作系统,并且模块间有最小的,简明的接口。


3.6 安全问题


1 在一个典型的系统中,最高级别的权限指的是管理员、超级用户或根用户的访问权限。

2 设计一个操作系统的关键问题是:组织或者至少是探测一个用户或者是一种恶意软件获得系统授权的权限的企图,尤其是从根目录获取。

(其他与安全相关的问题在14 、15章详细介绍。)


3.7 Unix SVR4进程管理


1 Unix操作系统中共有9中状态,具体如下表:

 九种状态的转换图如下所示:

 

只有当进程准备从内核态转为用户态时,才有可能发生抢占,进程在内核态下运行是不会被抢占的,这使得Unix不适用于实时处理。

Unix中有2个独特的进程。进程0是一个特殊的过程,是在系统启动时创建的。在启动时刻被加载,是交换进程。当新的交互用户登录到系统时,由进程1为该用户创建一个用户进程。随后,用户进程可以创建子进程,从而构成一棵分支树。因此,任何应用程序都是由一组相关进程组成。

2 Unix系统进程映像被分成3部分:用户上下文、寄存器上下文和系统级上下文。进程映像详情见下表:

 

用户级上下文:包括用户程序的基本成分。可以由已编译的目标文件直接产生。用户程序被分成正文和数据两个区域,正文区是只读的,用来保存程序命令。

寄存器上下文:处理器状态信息保存在这里。

系统级上下文:包含操作系统管理进程所需要的其他信息,由静态部分和动态部分组成。静态部分的一个成分是进程表项(包括进程状态、指针、进程大小、用户标识符、进程标识符、事件描述符、优先级、定时器、内存状态等)。U区(包含内核在进程的上下文环境中执行时所需要的额外的进程控制信息)、本进程区表(由内存管理系统使用)也是系统上下文静态部分。

进程表项和U区的区别反映出Unix内核总是在某些进程的上下文环境中执行。

进程表项和U区的具体情况如下:

3 Unix中的进程创建是通过内核系统调用fork()实现的。当一个进程产生一个fork()请求时,操作系统执行以下功能:

1)为新进程在进程表中分配一个空项。

2)为子进程赋一个唯一的进程标识符。

3)做一个父进程上下文的逻辑副本,不包括共享内存区。

4)增加父进程拥有的所有文件的计数器,以表示有一个另外的进程现在也拥有这些文件。

5)把子进程置为就绪态。

6)向父进程返回子进程的进程号;对子进程返回零。

 

      所有这些操作都在父进程的内核态下完成。为当内核完成这些功能后可以继续下面三种操作之一,它们可以认为是分派器例程的一个部分:

       ●在父进程中继续执行:控制返回用户态下父进程进行fork()调用处。

       ●控制权交给子进程。子进程开始执行代码,执行点与父进程相同,也就是说在fork()调用的返回处。

       ●控制转交给另一个进程。父进程和子进程都置于就绪状态。

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值