<OS Concepts 9th> Chap 3 进程管理

本章目标:

  • 介绍进程的概念:执行中的程序
  • 描述进程的特征:如调度、创建、终止
  • 探索进程间通信:使用共享内存和消息传递
  • 描述客户端-服务端框架下的通信

Abbr.

PC: Program Counter

PCB: Process Control Block

PID: Process ID

IPC: InterProcess Communication

RPC: Remote Procedure Call

3.1 进程概念

进程

process vs program

program是在存储在内存中的可执行文件,而process是正在执行过程中的program,强调active,包含PC(Program Counter,指向下一条执行的指令)和一些相关资源

 

进程状态

同一时刻一个处理器上只能有一个进程在运行。

  1. 新建态new
  2. 就绪态ready
  3. 等待态waiting
  4. 运行态running
  5. 终止态terminated

 

PCB 进程控制块

记录关于进程的一些信息:

  • 进程状态
  • PC
  • CPU寄存器
  • CPU调度信息:进程优先级,调度队列指针和一些调度相关的参数(chap 6)
  • 内存管理信息(chap 8)
  • accounting信息:CPU使用数量,时间限制,进程数量等
  • I/O状态信息:分配给该进程的I/O设备信息

线程

现代操作系统拓展进程的概念,允许一个进程有多个线程同时执行,在multicore系统上尤为高效(chap 4)

3.2 进程调度

调度队列

Job Queue:系统中所有进程

Ready Queue:内存中处于就绪态的进程队列

Device Queue:每个I/O设备会有自己的进程队列

下图为队列图表示进程调度示例:

就绪态的进程一旦开始执行,可能出现以下几种情况

  • 进程产生一个I/O请求于是被放入I/O队列
  • 进程产生了一个子进程,子进程进入ready queue等待执行
  • 时间片用完
  • 需要等待某个中断操作,被移出CPU直到中断操作发生则重新进入ready queue

 

 

调度器

Long term scheduler(Job Scheduler): 挑选放入ready queue的进程;调用不频繁;控制multiprogramming的程度

Short term scheduler(CPU Scheduler):挑选接下来执行哪个进程;调用很频繁,ms级别

Medium term scheduler:灵活地remove和reintroduce进程。SWAP操作(chap 8)

进程可分为I/O bound 和 CPU-bound

上下文切换

  • 切换时需要保存旧进程的状态并加载新进程之前的状态。
  • 上下文Context:PCB中的信息
  • 上下文切换的时间属于overhead,越少越好,切换所需时间依赖硬件

3.3 进程相关操作

进程创建

  • 进程通过PID进行标识管理
  • 父进程创建子进程(树状结构)
    • 资源共享:父进程和子进程之间可能共享所有/部分/无资源
    • 执行:并发执行或父进程等待子进程终止
    • 地址空间:子进程复制父进程;子进程单独load
  • UNIX 例子
    • fork:创建新进程
    • exec:在fork后调用,将新程序加载进进程的内存空间

进程终止

  • exit:进程执行完最后一条指令后就向OS请用删除它
    • wait:父进程获取子进程的输出返回
    • OS释放进程资源
  • abort:父进程终止子进程
    • 子进程使用超出分配的资源
    • 任务不再需要执行
    • 父进程exit:子进程也终止(cascading termination)

3.4 进程间通信ipc

IPC(InterProcess Communication)包括shared memory和message passing两种model

 

内存共享

producer process:提供信息

comsumer process:获取信息

在内存中开辟一块由producer和consumer共享的buffer。

  • unbounded buffer:producer可以源源不断提供新信息
  • bounded buffer
    • 通过in和out两个标记循环使用buffer
    • in标记buffer中下一个空闲的位置,for producer填入
    • out标记buffer中第一个有信息的位置,for consumer获取
    • in == out 时说明buffer空
    • (in + 1) % BUFFER_SIZE == out时说明buffer满

消息传递

  • Naming
    • 直接通信
      • 定义:send(P, message) & receive(Q, message) P\Q为对应进程
      • 性质
        • 自动连接
        • 一个link只连系一对processes
        • link可以是单向的,通常是双向的
    • 间接通信
      • 定义:message通过mailboxes(A.K.A ports)传送
      • 每个mailbox有唯一对应的id
      • 性质
        • 进程共享一个mailbox时才连接
        • 一个link可以连系多个processes
        • 一对processes可以有多个links
        • 单向或双向
  • 同步Synchronization
    • Synchronization:Blocking, sender和receiver交替进行,不可同时
    • Asynchronization:Non-Blocking,sender和receiver可以同时进行
  • 缓存
    • 无论是直接还是间接通信,交换的信息都在一个临时队列里,这种队列有三种方式
      • zero capacity:发送端在接收端收到之前必须block
      • bounded capacity:有限的信息可以暂存在队列中
      • unbounded capacity

3.5 IPC系统例子

本节介绍了POSIX shared memory和Mach message passing的例子,有基础的API使用,略。

Windows使用ALPC(advanced local procedure call)进行信息传输,类似标准的RPC(3.6.2),略。

3.6 Client-Server系统通信

Sockets

  • 定义:通讯的endpoint,由ip address+port number组成
    • ip address:定位设备
      • 127.0.0.1 表示本机
    • port number
      • 定位进程使用的”mailbox“
      • 16位 65536个
      • 0~1023个为一些通用的
        • FTP —— 21
        • SSH —— 22
        • DNS —— 53
        • HTTP —— 80
        • HTTPS —— 443
    • 一个通讯一定有两个sockets
    • 一个进程可以有多个port
  • Java提供三种不同类型的sockets
    • TCP:定向连接,例如获取当前时间
    • UDP:Connectionless,不需要建立connection,易丢包
    • Multicast:广播,多个接收方

RPC

  • Remote Procedure Call : 本机通过网络调用远端remote上的程序
  • Stub:local上的remote代理,local和stub通讯来控制remote
    • 定位remote的位置并把要传给remote的参数进行包装(marshall)

 

  • 通过matchmaker port获取通讯使用的port number
  • daemon(发音DEE-muhn)是一段连续运行的程序,用于处理计算机系统希望接收到的阶段性的服务需求

Pipes

full-duplex:数据可同时双向传输

half-duplex:支持双向,但不能同时,即同一时间只能单向

Simplex:只能单向

Original Pipes

  • UNIX将pipe当作文件一样对待,通过系统调用readwrite来access
  • fd (file descriptor)
    • fd[0]: read-end of the pipe
    • fd[1]: write-end of the pipe
  • pipe通信
    • 父进程通过fork创建pipe与子进程通信
    • 进程外不可访问
    • 子进程继承pipe

 

Named Pipes

  • 双向通信 & 没有父子关系,更powerful
  • 一个pipe一旦建立,可被多个进程用于通信(可有多个writers

例子:UNIX命令行中, | 可创建pipe,如 ls | grep example

Takeaways

  1. 进程的五种状态
  2. 进程切换时save & load PCB
  3. 进程间通信
    1. shared memory
    2. message passing
      1. socket : ip + port
      2. RPC: stub
      3. pipe

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值