【Chapter 3: Process】

批处理系统与分时系统

批处理系统:一批一批的处理任务的一种系统,用户将一批作业提交给操作系统后就不再干预,有操作系统控制它们自行运行。(不具备交互能力)

分时系统:多个用户使用同一台计算机,多个程序分时(分时间片)共享硬件和软件资源。

分时操作系统将CPU的时间划分为若干个片段,称为时间片,操作系统以时间片为单位,轮流为每个终端用户。

TIPS:

①批处理系统没有人机交互;

②分时系统允许多个用户同时使用;

③批处理系统中允许程序长时间地占用CPU,而分时系统不允许。

Process Concept (进程概念)

CPU的角度理解进程Process:进程是CPU资源分配的最小单位

CPU速度很快,只有寄存器能够追的上它的脚步,内存和别的挂在各总线上的设备完全是望其项背。当有多个任务要执行时,不管怎么样的策略,在CPU看来就是轮流着来执行一段程序代码,实现一个功能的过程介绍,当得到CPU的时候,相关的资源(显卡、外设等)必须也已经就位,然后CPU开始执行。

这里除了CPU以外所有的就构成了这个程序的执行环境,也就是我们所定义的程序上下文。

当这个程序执行完,或者分配给他的 CPU 执行时间用完,那它就要被切换出去,等待下一次 CPU 的光临。在被切换出去的最后一步工作就是保存程序上下文,因为这个是下次CPU 光临的运行环境,必须保存。
CPU 看来所有的任务都是一个一个的轮流执行的,具体的轮流方法: 先加载程序A的上下文,然后开始执行A保存程序A的上下文,调入下一个要执行的程序B的程序上下文,然后开始执行B,保存程序B的上下文
进程是系统进行资源分配和调度的单位( T )
进程是CPU 调度的最小单位                  ( F) 

内存中的进程

text(文本段):存放程序的二进制代码 ,其长度固定,不会动态变化。

Data section(数据段):分为全局数据区和常量区

全局数据区:存放全局变量和静态数据,即使是函数内部的静态局部变量,均存放于全局数据区。程序结束后由OS释放

常量区:所有常量,程序结束后由OS释放

Heap(堆):由程序员分配和释放,如果程序员不释放,程序结束时可能由OS释放,存放:new, malloc产生的动态数据

Stack(栈):由编译器自动分配和释放,存放:1.函数内部的局部变量     2.函数的参数值。

程序是被动执行的,进程是主动的(当可执行文件加载到内存中时,程序成为进程

一个程序可以是多个进程(考虑多个用户执行同一个程序

同一个程序不同的数据

不同的程序同一个进程

进程的三维概念:程序、数据、状态。

KEY:

As a process executes, it changes state(状态)

new (新建)The process is being created

进程在创建时需要申请一个空白PCB,向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态

running (运行):  Instructions are being executed

waiting (等待或被阻塞):  The process is waiting for some event to occur

ready  (就绪):  The process is waiting to be assigned to a processor (万事俱备 随时随地可以被CPU调度)

terminated (终止):  The process has finished execution

1. 进程从就绪状态进入运行状态的原因可能是( A )

A. 被选中占有CPU     

B. 等待某一事件发生

C. 等待的事件已经发生

D. 时间片用完

2.当一个进程处于( B )状态时,称为等待或阻塞状态

A.正在等待CPU

B.正在等待合作进程的一个消息

C.正在等待分配给它一个时间片

D.正等待进入内存

3.以下哪种是不可能的进程状态变化( D )

A. 阻塞 – 就绪

 B. 执行 – 阻塞

 C. 执行 – 就绪 

D. 阻塞 – 执行

进程与线程

Process Control Block(PCB,进程控制块,包含控制和管理进程的信息,完成资源分配

PCB:进程信息的仓库,这些信息在进程与进程之间是不同的

一个进程只能有一个PCB,多个进程不能共享PCB,进程和PCB之间是一对一的关系。

Context Switch (上下文切换)

When CPU switches to another process, the system must save the state of the old process and load the saved state for the new process via a context switch 

(当CPU切换到另一个进程时,系统必须保存旧进程的状态,并通过上下文切换为新进程加载保存的状态)

Context-switch time is overhead(额外开销); the system does no useful work while switching

The more complex the OS and the PCB è the longer the context switch

(切换时,系统不会执行任何有用的操作。操作系统和PCB越复杂,上下文切换的时间就越长)

上下文切换速度因机器而不同(影响CPU运行的效率 切换上下文时CPU处于idle空闲状态)

它依赖于内存速度、必须复制的寄存器的数量、是否有特殊指令,一般需几毫秒。

Process Scheduling (进程调度)

进程调度的目的是使CPU的效率最大化,CPU中不能同时运行两个进程,其他的进程只能等待。

最大限度地提高CPU利用率,快速将进程切换到CPU上以实现分时

进程调度器从可用进程中选择下一个在CPU上执行的进程

用于单处理器系统

永远不会有超过一个正在运行的进程。

如果有更多的进程,其余的进程将不得不等待CPU释放并重新调度。

维护进程的调度队列

作业队列–系统中所有进程的集合

就绪队列–驻留在主存中、准备好并等待执行的所有进程的集合

设备队列–等待I/O设备的一组进程等待特定IO设备的进程列表称为设备队列。每个设备都有自己的设备队列。假设进程向一个共享设备(如磁盘)发送IO请求,由于系统有许多进程,磁盘可能会忙于其他进程的IO请求,因此该进程可能需要等待磁盘。

进程在不同的队列之间迁移

Short-term scheduler  ( 短期 调度 ) or CPU scheduler  
短期调度,又称为进程调度、低级调度或微观调度
短期调度是从就绪队列里调度进程到处理机中
这也是通常所说的调度,一般情况下使用最多的就是短期调度。
主要任务:按照某种策略和算法 CPU 分配给一个处于就绪状态的进程 ,分为抢占式和非抢占式。

Long-term scheduler  (长期调度) or job scheduler

选那些进程应该被放入ready queue  

对于批处理系统,进程更多地是被提交,而不是马上执行。这些进程被放到大容量存储设备(通常为磁盘)的缓冲池中,保存在那里以便以后执行。长期调度程序或作业调度程序从该池中选择进程。长期调度从批作业中选出一些进入就绪队列。

长期调度,又称为作业调度或高级调度,这种调度将已进入系统并处于后备状态的作业 按某种算法选择一个或一批 ,为其建立进程,并进入主机,当该作业执行完毕时,还负责回收系统资源。
  批处理系统 中,需要有作业调度的过程,以便将它们分批地装入内存, 在分时系统和实时系统中,通常不需要长期调度 。它的频率比较低,主要用来控制内存中进程的数量。

不是所有的系统都会用到长期调度,批处理系统会用到,实时操作系统不会用到长期调度。

Medium-term scheduler(中期调度程序)

它的核心思想是能 将进程从内存或从 CPU 竞争中移出 ,从而降低多道程序设计的程度, 之后进程能被重新调入内存 ,并从中断处继续执行,这种交换的操作可以调整进程在内存中的存在数量和时机。
其主要任务是按照给定的原则和策略, 将处于外存交换区中的就绪状态或等待状态的进程调入内存 或把处于内存就绪状态或内存等待状态的进程交换到外存交换区

Operations on Processes

fork()  系统调用创建新进程

exec()  在fork()之后使用系统调用,用新程序替换进程的内存空间

fork的妙用

fork调用的奇妙之处:它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:

1)在父进程中,fork返回新创建子进程的进程ID

2)在子进程中,fork返回0

3)如果出现错误,fork返回一个负值;

1.为什么fork()返回的是两个值?

fork函数是一个API函数,最终会发生异常处理函数系统调用system call。两次分别为底层的一次system fork外加操作系统的一次调用。操作系统先调用谁和系统以及内存占用有关(不好定论)。

【Process Termination】(终止进程)

(译文)

主动方式:

进程执行最后一条语句,然后使用exit()系统调用请求操作系统删除它。

将状态数据从子级返回到父级(通过wait())

进程的资源由操作系统分配

被动方式:

父进程可以使用abort()系统调用终止子进程的执行。这样做的一些原因:

子项已超出分配的资源

不再需要分配给孩子的任务

父级正在退出,如果父级终止,操作系统不允许子级继续

一些操作系统,比如虚拟机虚拟内存系统:

如果其父级已终止,则不允许子级存在。如果进程终止,则其所有子进程也必须终止。我们称之为级联终止。终止由操作系统启动。

*l希望接收以逗号分隔的参数列表,列表以NULL指针作为结束标志

*p是一个以NULL结尾的字符串数组指针,函数可以DOSPATH变量查找子程序文件

 问题:

分别是如何影响count值的?

父进程等待子进程执行,结果又会怎样?

如果fork调用返回值是一个大于0的数,这个数代表了什么?(表示当前是父进程)

既然进程是fork出来的,那第一个进程是怎么来的?(自己打出来的)

子进程为什么没有继续创建进程?(子进程fork过来PC=5,从此开始执行)

子进程和父进程谁先执行?为什么?(并发执行)

进程和程序的本质区别是(  D )

A. 前者分时使用CPU,后者独占CPU

B. 前者是执行程序,后者是源代码

C. 前者在一个文件中,后者在多个文件中

D.前者为动态的,后者为静态的

参考答案:A

 进程的基本特称

实验总结

 

 

 

 

 

 

 

 

【Interprocess Communication】(IPC,进程间通信)

 进程间不允许互相访问内存,所以用系统调用函数开辟一块共享的内存区域(仅仅建立时运用系统调用),读写时由程序员控制。该共享内存在创建它的这个进程的地址空间,其它想使用该共享内存区域的进程必须让它(这个共享内存区域)与自己的进程空间有关联。

shmget(得到一个共享内存标识符或创建一个共享内存对象)

shmat(把共享内存区对象映射到调用进程的地址空间)

父进程向shaaddr写入信息 strcpy(shm_addr, "Hello world! this message is father process write!");

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值