进程切换(上下文切换):

  • 定义:暂停当前运行进程,从运行状态变成其他状态,调度另一个进程从就绪状态变成运行状态
  • 要求:切换前,保存进程上下文;切换后,恢复进程上下文;快速切换
  • 进程存储的生命周期的信息:寄存器(PC,SP,...);CPU状态;内存地址空间

进程控制块PCB:内核的进程状态记录

  • 内核为每个进程维护了对应的进程控制块PCB
  • 内核将相同状态的进程的PCB放置在同一队列

进程控制块结构:

  • 进程标识信息
  • 进程状态信息
  • 进程占用的资源(存储资源、内核堆栈等)
  • 保护现场用的内容
  • 当前进程在哪个队列

其中内存地址空间结构中会包含:有哪些内存块及地址空间,第一级页表起始地址,置换相关结构

进程创建:

  • Windows进程创建API:CreateProcess
  • Unix进程创建系统调用:fork/exec。fork()把一个进程复制成两个进程,父子进程有各自的PID;接下来的exec()用新程序来重写当前进程,PID不改变。

空闲进程创建

当用户代码执行完之后,系统将在空闲进程中执行。

第一个内核线程的创建:

fork()的开销:

  • 对子进程分配内存
  • 复制父进程的内存和CPU寄存器到子进程里
  • 开销昂贵

99%调用fork是为了接下来调用exec,考虑到fork()操作中内存复制是没有作用的,子进程可能会关闭打开的文件和连接,因此考虑将其合并到一个调用中,于是出现了vfork()。

vfork():

  • 创建进程时,不再创建一个同样的内存映像,而是当调用exec()时才开始复制,而要被覆盖或者关闭的资源不再进行复制
  • 一些时候称为轻量级fork()
  • 子进程应该几乎立刻调用exec()
  • 现在使用Copy on Write(COW)技术

进程加载exec

  • exec调用成功时:是相同的进程,运行了不同的程序
  • exec()允许一个进程加载一个不同段程序,并在MAIN执行,(_start)
  • 允许一个进程指定参数的数量argc和字符串参数数字argv
  • 允许进程指定不同的控制流,OS中可指定不同的应用程序,即调用成功=相同进程,运行的是不同的程序!
  • Code(代码段)stack(堆栈)heap(堆)等完全重写

进程等待与退出:

父进程等待子进程:

1. wait()系统调用用于父进程等待子进程的结束

  • 子进程结束时通过exit()向父进程返回一个值
  • 父进程通过wait()接受并处理返回值

2. wait()系统调用的功能

  • 有子进程存活时,父进程进入等待状态,等待子进程的返回结果。当某子进程调用exit()时,唤醒父进程,将exit()返回值作为父进程中wait的返回值
  • 有子进程调用exit()而父进程还未调用wait()处理时,子进程被称为僵尸进程。如果此时父进程调用wait()则直接处理并返回
  • 无子进程或无子进程存活时,wait()也是立刻返回

3. exit()用于进程的有序终止

  • 进程结束执行时调用exit(),完成进程资源回收。

4. exit()系统调用的功能

  • 将调用参数作为进程的结果返回
  • 关闭所有打开的文件等占用资源
  • 释放内存
  • 释放大部分进程相关的内核数据结构
  • 检查是否父进程是存活的:如果父进程存活,保留结果的值直到父进程用wait()处理,进入僵尸状态;如果父进程不存活,则子进程为孤儿进程,直接释放所有数据结果,进程结束
  • 清理所有等待的僵尸进程

其他进程控制系统调用

  • 优先级控制:nice()指定进程的初始优先级;unix系统中进程优先级会随执行时间而衰落
  • 进程调试支持:ptrace()允许一哥进程控制另一个进程的执行;设置断点和查看寄存器
  • 定时:sleep()可以让进程在定时器的等待队列中等待指定。

为什么要让父进程等?而不是直接结束?

当进程执行完毕退出后,几乎所有资源都回收到OS中。但有个资源很难回收,就是PCB,PCB是代表进程存在的唯一标识,OS要依据PCB执行回收。这个功能由父进程完成。

《操作系统》OS学习(十):进程控制相关推荐

  1. 【王道】操作系统OS第二章进程管理(二[1])

    本笔记结合<2023王道操作系统考研复习指导>食用 操作系统OS第二章进程管理 本笔记结合<2023王道操作系统考研复习指导>食用 1.进程 1.1.进程的组成 1.1.1.P ...

  2. 操作系统(九)进程控制

    2.1.3 进程控制 目录 2.1.3 进程控制 2.1.3.1 基本概念 2.1.3.2 进程创建原语 2.1.3.3 进程终止原语 2.1.3.4 进程的阻塞与唤醒 2.1.3.5 进程的切换 2 ...

  3. 操作系统OS学习笔记(1):操作系统的发展

    操作系统(OS)的目标 实现:方便性/有效性/可扩充性/开放性 方便性 如果在计算机硬件上配置了OS=可以使用编译命令将用户采用高级语言编写的程序翻译成机器代码,或者直接通过OS所提供的各种命令来操纵 ...

  4. exec函数介绍(整理)(附带:操作系统实验一:进程控制实验 代码)

    (1)exec函数说明 fork函数是用于创建一个子进程,该子进程几乎是父进程的副本,而有时我们希望子进程去执行另外的程序,exec函数族就提供了一个在进程中启动另一个程序执行的方法.它可以根据指定的 ...

  5. 操作系统学习笔记-2.1.3进程控制

    操作系统学习笔记-2019 王道考研 操作系统-2.1.3进程控制 文章目录 3.进程控制 3.1知识概览 3.2 基本概念 3.2.1什么是进程控制? 3.2.2如何实现进程控制? 3.3进程控制相 ...

  6. 操作系统(二)进程管理

    文章目录 第二章 进程管理 一.进程的概念.组成.特征 (一)进程的组成--PCB (二)进程的组成--程序段.数据段 程序是如何运行的? (三)进程的特征 (四)总结 二.进程的状态与转换 (一)进 ...

  7. Python学习笔记.OS学习笔记 OS操作系统(operating system)(二)程序和进程 输出进程号,工作目录最有用!

    程序和进程: 运行一个程序的时候,操作系统会创建一个进程.他会使用系统资源和操作系统内核的数据结构! 进程间相互隔离,即一个进程无法访问其他进程内容,也无法操作其他进程! Mac上面可以使用活动监视器 ...

  8. 【操作系统/OS笔记09】线程、线程的实现、上下文切换、进程控制

    本次笔记内容: 7.8 为什么使用线程 7.9 什么是线程 7.10 线程的实现 7.11 上下文切换 7.12 进程控制--创建进程 7.13 进程控制--加载和执行进程 7.14 进程控制--等待 ...

  9. 操作系统学习笔记02【进程控制——进程互斥的硬件实现方法】【自用】

    1.进程控制 什么是进程控制? 如何实现进程控制: 为了避免把某一进程pbc从一个队列转移到另一个队列,但是并没有把pbc内的状态标志改为新的对应状态,从而导致pcb的状态标志与实际所处队列不一样这一 ...

最新文章

  1. 化栈为队(两个栈来实现一个队列)
  2. python 长连接 mysql数据库
  3. Eureka Client的使用
  4. c++ python混合编程 restful_How to use Python to build a RESTful Web Service
  5. 和媳妇加一起月薪三万五想换车了不知道x5养的起吗?
  6. JQuer实战第一讲:验证用户名是否可用
  7. 【Python实例第35讲】高斯过程分类:Iris数据集
  8. 【分享】华为总裁任正非谈企业管理:正确的方向来自于妥协
  9. [design decision] user awareness: 自动安装还是不自动安装?
  10. 区块链的开源资料 Hyperledger Fabric
  11. 西瓜书重温(七): 贝叶斯分类器(手推+代码demo)
  12. 读史可以使人明智,鉴以往可以知未来
  13. 编译android vendor,Android ----制作自己的Vendor
  14. 数据合并中pd.merge()和pd.concat()区别
  15. 读书:《人人都是产品经理》-苏杰
  16. 使用 Cloudreve 快速搭建一个强大的个人云盘
  17. JAVA开发(后端):微信小程序API调用详细分析及步骤
  18. 微信小程序 监听手势滑动切换页面
  19. 计算机科学与技术书单
  20. 校园二手物品商城交易平台

热门文章

  1. 每天2分钟,10个简单方法改变你的生活
  2. 学习方法书籍 很好推荐
  3. 安装OpenCL和AMD驱动程序
  4. 如何吸引财富呢?请做这六件事吧!
  5. 加入初创企业需要想清楚的几个问题
  6. 解决 VUE: [Vue warn]: Do not use built-in or reserved HTML elements as component id: xx
  7. FreeSql (二十四)Linq To Sql 语法使用介绍
  8. 4、容器虚拟化网络概述
  9. Service-Oriented Architecture,SOA(转)
  10. 20分钟快速了解Redis