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

动态优先权调度算法的模拟 动态优先权调度算法的模拟 动态优先权调度算法的模拟 实验要求:用C语言编程实现动态优先权进程调度过程的模拟。 实验内容: (1)每个进程控制块PCB用结构描述,包括以下字段: *进程标识符id *进程优先数priority,并规定优先数越大的进程,其优先权越高。 *进程已占用的CPU时间cputime *进程还需占用的CPU时间alltime,当进程运行完毕时,aiitime变为0 *进程的阻塞时... 阅读详情

本章目标:

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

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当作文件一样对待,通过系统调用read和write来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

 

动态优先权进程调度算法 #include #include #define READY 1 #define BLOCK 2 struct PCB { int ID;//进程id int PRIORITY;//进程优先级,越大越优先 int CPUTIME;//已经运行的时间片 int ALLTIME;//还要运行的时间片 int STARTBLOCK;//进程开始变成BLCOK的时间片 int BLOCKT 阅读详情

相关推荐

操作系统非抢占式静态优先级调度算法(C语言)

**主要数据结构 单链表(进程表,就绪进程表),结构体(结构化进程信息)** 大致步骤: 1.输入模块:接收进程信息,包括进程代号,进程创建时间,进程运行时间,进程优先级,得到进程表 2.就绪进程判断模块:用Time记录系统当前运行的时间,得出就绪进程表** 3.对就绪进程表按照优先序列排序 注意点: state用来记录当前进程是否存在于就绪队列中; 排序算法采用的是交换结点值的冒泡算法,而不是直...

是我的博客啊 1万+

进程状态变换模拟

问题: 编写一个程序,模拟若干进程调度执行的情况。假设进程的状态分为执行和就绪两种。每个进程以其PCB为代表即可,无需创建真正的进程。以链表的方式组织PCB,分为三个队列: freeQueue:一个空白PCB队列 readyQueue:一个就绪队列 runningQueue:一个执行队列 程序开始运行时,用户输入进程数量n,以及每个进程需要运行的时间t0/t1/…/tn。程序从空

u014285517的专栏 3698

【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识04

编号学科(课程)核心知识点在云计算/云存储/云网络/云安全/云MaaS中的作用代表教材/资料/论文 + 数学方程式列表工业界应用D1421​云原生数据库:TiDB​HTAP(混合事务/分析处理)、分布式SQL、水平扩展、强一致(Raft)、自动故障恢复、与MySQL兼容、TiFlash列式引擎提供弹性扩展的分布式数据库;支撑高并发在线交易与实时分析教材:《TiDB in Action》PingCAP(2020) 论文:《TiDB: A Raft-based HTAP Database》(2017)

weixin_49199313的博客 407

操作系统实验报告

操作系统实验报告

Qstupid的博客 8381

Cadence——原理图相关教程

包含创建文件,原理图,元器件,规则检查,PDF与BOM清单输出,各类PCB网表

haonanyayaya的博客 1万+

最新Win10离线安装.NET Framework 3.5的方法(附离线包2022/3/22)

win10 .net framework 3.5离线安装

别告诉我有Bug 27万+

【操作系统--CPU调度算法】Linux环境中C语言详解(附代码)

操作系统之CPU调度算法,使用C语言实现,可运行在linux环境中

优快云已停更,感兴趣关注https://aaronzijingcai.github.io/ 1万+

2025 高效抓取雪球社区数据:自动化导出Excel与PDF全攻略

本文详细介绍了2025年高效自动化抓取雪球社区数据的完整方案。通过Python脚本,用户可自动抓取帖子列表数据并导出为结构化的Excel表格,同时批量将帖子内容保存为PDF文档,并支持合并与添加书签,极大提升投资研究和信息整理的效率。

weixin_29034963的博客 693

[Operating.System.Concepts(9th,2012.12)].Abraham.Silberschatz.文字版(恐龙书——操作系统概念 原书第九版)课后习题 参考答案

恐龙书第九版课后试题答案,有这一份就够了,嘿嘿

YoOAOoY的博客 3万+

Cube.js 安装避坑指南:从零到一键启动

本文是一份详细的Cube.js安装避坑指南,旨在帮助开发者从零开始顺利启动Cube.js。文章重点强调了安装前的环境准备,包括Node.js版本、包管理工具和项目路径等关键“地基”,并深入解析了使用npx安装的优势、数据库类型选择以及数据库连接配置的核心步骤与常见陷阱,确保您能高效完成安装并成功启动服务。

weixin_29218509的博客 429

拯救者Y9000P 2022双系统实战:Ubuntu22.04分区优化与驱动避坑指南

本文提供联想拯救者Y9000P 2022款安装Ubuntu 22.04双系统的详细实战指南。重点讲解针对该机型的磁盘分区优化方案、NVIDIA显卡驱动安装避坑技巧,以及安装后的网络、时间同步等必备配置,帮助用户高效完成双系统部署并提升使用体验。

weixin_29208327的博客 425

c语言创建PCB并调度进城,有c语言模拟调度算法吗??

/*本c程序为按优先数的进程调度*/#include#include#include#define NULL 0#define LEN sizeof(struct pcb)struct pcb{ int pid;struct pcb *next;int time;int priority;char status;};int n,m;struct pcb *head,*runpcb;main(){ ...

weixin_28595749的博客 584

【MFiX后处理】MFiX中使用des_usr_var输出颗粒的传热量(2020-11-27更新变更输出变量名方法)

参考之前Yin的那一篇博客 https://www.cnblogs.com/Jay-CFD/p/10621274.html 输出一下颗粒传热量 使用的算例是fluid_bed_dem_2d 打开des scalar tracking 前面都和Yin那篇一样,打开enable user scalar tracking 输入2 因为第一个用来测试Y加速度了 第二个输出传热量 然后在output vtk中勾选好 更改源代码 源代码为des_thermo_newvalues.f 在mfix-GUI自带的ed

beidou111的博客 1533

实验一 处理机调度

实验目的 多道程序设计中,经常是若干个进程同时处于就绪状态,为了使系统中的各进程有条不紊地运行,必须选择某种调度策略,以选择一个进程占用处理机。本次实验设计一个模拟单处理机调度的算法,以加深处理机调度的算法的理解。 实验内容 1.按照轮转(时间片)算法设计模拟调度程序。 2.输出进程的调度过程。 源程序 #include<stdio.h> #include<...

不是志锋的博客 3182

海洋科学—物理海洋学 第五章 海洋环流

本章是基于《海洋科学导论》,但里面涉及到的重要的公式推导是专门拎出来推的,主要借鉴董昌明老师的《物理海洋学导论》,其中有一些多出来的推导,会在更新完整个物理海洋学之后重新拿出来一一讲解,最后开一个番外篇

qq_58518586的博客 1万+

60、拓扑码:从理论到应用

本博客深入探讨了拓扑码的基本理论、构造方法及其在量子计算中的应用。重点介绍了颜色码的拓扑起源、编码量子比特的计算方法、弦算子的构造与性质、边界条件的影响、同调描述以及与统计模型相关的错误阈值分析。同时,还涵盖了拓扑码的历史发展、与其他拓扑码的关系、与凝聚态系统的联系,以及其在激发态和高维中的表现。博客展示了拓扑码在容错量子计算和未来量子信息领域的广阔前景。

o1p2q3r的博客 129

多级反馈队列FCFS

多级反馈队列

weixin_44735475的博客 302

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

操作系统实验(一):进程控制块的作用

实验要求: 定义多个进程实体(2个以上); 初始化进程实体; 标识进程状态; 依次输出每个执行进程的开始时间和周转时间; 采用随机函数模拟进程的到达时间; 采用随机函数产生每个进程实体的执行时间。 源码 PCB的定义 #ifndef __PCB_H__ #define __PCB_H__ #define BLOCK -1 #define READY 0 #...

qq_40019838的博客 2066

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

记录:2022-8-29 四道水题 进程概念 PCB 上下文切换 CentOS环境配置

2022-8-29学习笔记

qq_44686225的博客 247

opencl device queue

主机端代码: //create device queue cl_queue_properties props[]={ CL_QUEUE_PROPERTIES, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE| ...

qingsong1001的专栏 690

KeInsertDeviceQueue()

凡是支持异步操作的设备驱动都要提供一个"I/O启动函数",并使驱动对象中的函数指针DriverStartIo指向这个函数。一般而言,调用了一次启动函数之后,就要等到所启动的过程完成才能再次调用启动函数。但是,在一段时间内,IRP的到来完全有可能快于所启动的过程,使得第一个IRP所启动的过程尚未结束就来了第二个IRP。这并非因为支持异步操作所致,而是因为后面的IRP来自不同的线程,然而却是针对同一个

zacklin的专栏 1210

理解 Linux 动态库加载:LD_LIBRARY_PATH

flyfish

二分掌柜的 385

USB 技术系列 11 · USB Linux 驱动框架

本文系统解析Linux USB驱动框架,涵盖USB Core、HCD(xhci-hcd/dwc3)、类驱动(CDC/HID/Mass Storage)分层架构,详解usb_device_id匹配、probe/disconnect生命周期及Device Tree配置。结合RISC-V N300实战,揭示Host/Device双模式驱动开发核心逻辑,助力嵌入式BSP开发者掌握USB子系统全栈能力。

peter_pan_study的博客 263

Linux 服务器性能排查手册(2026):CPU、内存、磁盘IO、网络四大瓶颈定位

iptables 四表五链模型、firewalld zone 信任级别、云安全组与主机防火墙的关系与优先级,避坑改了防火墙把自己挡在服务器外面的翻车事故。

2502_91473995的博客 336

Linux rm 误删文件恢复实操教程

Linux使用rm删除文件时,并不会直接抹除磁盘上的数据,只是移除文件索引,让系统不再识别这块空间。只要没有写入新数据,原有扇区内容就会保留。新文件写入才有可能覆盖这些区域,一旦覆盖就很难找回。恢复的本质就是扫描磁盘,找到这些还存在、但索引丢失的数据条目,再把它们导出保存到其他分区。越早停止写入,恢复成功的概率越高。

海天数据恢复-winhex数据恢复教程 236

Windows/Linux下强实时运动控制内核(二):基于Qt的Delta机械手的开发应用

强实时运动控制内核MotionRT750下Qt开发Delta机械手的完整开发流程。

weixin_57350300的博客 244
上一篇: <OS Concepts 9th> Chap 2 OS结构
下一篇: <OS Concepts> 1- Intro
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值