当前位置: 首页 > news >正文

操作系统基础·3 进程线程模型

1、操作系统执行应用程序是以进程的方式运行的,进程即正在执行的程序的抽象,由程序代码(文本段)、数据段(全局变量)、进程控制块(PCB)、堆栈(临时数据:函数参数,返回地址,局部变量)、堆(运行时动态分配的内存)组成。进程有生命周期,可以创建、运行、暂停、消亡、并发执行,进程间可通过通信共享资源,每个进程有独立的地址空间与执行环境,有自己的PC和PSW。

2、PCB是管理程序运行的数据结构,包含进程状态、PC、CPU寄存器、CPU调度信息(优先级、调度队列指针)、内存管理信息、记账信息(CPU使用情况、自启动经过的时钟时间、时间限制)、I/O状态信息(分配给进程的I/O设备、打开文件列表),如下图:

3、程序是存储在磁盘上的被动实体(可执行文件),而进程是活动的,一个程序可以有个进程。程序如何转化为进程?(1)将代码和静态数据加载到内存;(2)为程序的运行时栈(stack)分配内存;(3)为程序的堆(heap)分配内存;(4)执行与I/O相关的设置;(5)启动程序的运行。进程的内存映像如上图。

4、进程状态:新建、运行、等待、就绪(进程等待获得CPU)、终止,如下图。大多数状态不可逆转(如等待不能转换为运行),状态转换大多为被动进行,但运行→等待是主动的。一个进程在一个时刻只能处于上述状态之一。

5、当CPU切换到另一个进程时,系统必须通过上下文切换保存旧进程的状态,加载新进程的状态,其中进程的上下文保存在PCB中,如上图。上下文切换时间是纯开销,系统在切换时不执行任何有用的工作,与操作系统和PCB的复杂度正相关,时间开销取决于硬件支持。移动系统中区分前台和后台任务。

6、进程的挂起指的是进程因为某种原因暂时不能继续执行,需要等待某个事件或者满足某种条件后才能恢复执行。挂起状态下,进程被保存在磁盘上,不占用内存资源和CPU时间。进程挂起的原因有:用户请求、系统资源不足、进程间通信、I/O操作、错误或异常。有挂起状态的进程状态转换图如下图:

7、进程的组织方式如上图,因此PCB应包含①进程标识符;②进程当前状态;③进程队列指针(下一个PCB的地址);④程序和数据地址;⑤进程优先级;⑥CPU现场保护区(通用寄存器、程序计数器、程序状态字等);⑦通信信息(与其他进程所发生的信息交换时记录的信息);⑧家族关系(如父子进程标识);⑨资源清单(所需资源及当前已分配资源)。

8、进程创建的流程如下图。进程通过进程标识符进行标识和管理,子进程(pid=0)是父进程的副本,fork()后开始运行wait(&status):暂停调用进程直至其子进程结束,子进程的结束状态会被返回在status所指向的位置。waitpid(pid, &status, options):可以用它等待一个特定的子进程。

9、进程终止是进程执行最后一条语句,通过exit()系统调用请求操作系统删除它(通过wait将状态数据返回给父进程,进程的资源由OS释放),如上图。父进程可以使用abort()系统调用终止子进程的执行,可能因为:①子进程超过了分配的资源;②分配给子进程的任务不再需要;③父进程正在退出。如果一个进程终止,则其所有子进程也必须终止(由操作系统发起,级联终止)。父进程可以使用pid = wait(&status)。当​​父进程终止​​而​​子进程仍运行​​时,子进程成为孤儿进程;当​​子进程已终止​​,但​​父进程未读取其退出状态​​时,子进程成为僵尸进程进程终止的原因:(1)正常退出;(2)错误退出(运行时错误,如除以零或访问无效内存);(3)致命错误(如硬件错误或操作系统错误);(4)由其他进程终止;(5)用户请求;(6)操作系统干预(使用过多资源或违反操作系统策略);(7)父进程终止;(8)系统关机或重启。

10、一个UNIX示例如下图。若主程序连续fork();三次,则共有2^3=8个进程

11、进程阻塞如下图1,可能因为:I/O 请求、等待子进程、信号或消息、资源争用、内存页错误。进程唤醒如下图2,可能因为:I/O 完成、子进程终止、接收到信号或消息、获取资源、内存页调入完成。进程挂起要到PCB表中查找该进程的PCB、检查进程状态、更改进程状态、保存进程上下文、更新PCB、将目标进程从就绪队列中移除、添加到挂起队列中。进程激活要到PCB表中查找该进程的PCB、检查进程状态、更改进程状态、恢复进程上下文、更新PCB、将目标进程从挂起队列中移除、添加到就绪队列中。

12、单线程的劣势:CPU利用率低、响应性差、无法充分利用多核CPU、不适合并发,多线程的优势:响应性、资源共享、经济性、可扩展性。应用程序中的多任务可以通过多线程来实现,线程的创建是轻量级的,内核通常也是多线程的。

13、进程是系统进行资源分配和调度的独立单位,线程是CPU调度和分派的基本单位、比进程更小的能独立运行的基本单位。一个进程可以包含多个线程,线程运行在同一内存空间,共享相同的运行环境;线程间可以直接读写同一进程中的数据,通信更便捷,切换开销更小。线程属于进程,可以被看作是进程内部的独立的执行路径,一个进程内的多个线程共享该进程的资源,如内存空间、文件等。

13、线程控制块(TCB)是线程的大脑,包括:线程标识符、线程状态、CPU寄存器值、线程优先级、所属进程的引用。特别地,内核级TCB包含内核堆栈、CPU调度信息和内核资源使用情况;用户级TCB包含用户堆栈、用户资源使用情况。多线程进程的地址空间布局如下图:

14、多对一模型如上图,多个用户级线程映到单个内核线程,一个线程的阻塞会导致所有阻塞,在多核系统上多个线程可能无法并行运行,因为一次只能有一个线程在内核中运行。一对一模型如下图1,创建一个用户级线程会创建一个内核线程,比多对一模型具有更多的并发性,但由于开销每个进程中的线程数量会受到限制。多对多模型如下图2。两级模型如下图3,更大的灵活性。

15、内核级线程由操作系统内核直接支持和管理,可以在多处理器系统上并行运行,如果一个阻塞则OS可以立即调度同一进程中的另一个运行,其创建、销毁、同步和切换都需要进行系统调用、开销较大。用户级线程完全在用户空间中实现,其创建、销毁、同步和切换由相应的用户级线程库完成,操作系统不能直接调度、也不能在多处理器系统上并行运行,如果一个阻塞则整个进程都会被阻塞

16、Pthreads(POSIX标准):创建pthread_create(thread, attr, start_routine, arg);退出pthread_exit(retval);出让资源pthread_yield();合并pthread_join(thread, retval),多线程合并可用for循环。一个例子:

http://www.dtcms.com/a/554571.html

相关文章:

  • CTFHub XSS通关2:存储型
  • 递归专题3 - 回溯算法十大类型
  • python全栈-数据分析软件tableau的使用
  • 交流电里的电子咋流动?不是往前跑,而是来回 “晃”
  • 做网站写代码怎么样免费网站建设基础步骤
  • 网站.cc域名网站常见结构有那些
  • 网上做兼职老师的正规网站搭建网站的步骤有哪些
  • python进阶教程10:面向对象、super()和元类
  • 大同建设银行保安招聘网站商品展示的网站源码
  • 中交建设集团 网站win10系统可以做网站搭建
  • 做网站建设怎么介绍自己网页图片文字识别
  • 内部类和Object类
  • B049基于博途西门子1200PLC红绿灯控制系统仿真
  • 淘宝手机网站模板下载安装公司网站模板大全
  • 专属虚拟环境:Hugging Face数据集批量下载(无登录+国内加速)完整指南
  • 域名访问网站应该怎么做高端网站建设济南兴田德润简介电话
  • **新一代券商与机构专业交易系统开发:从国际金融变局到技术架构重构**
  • 最好网站建设公司哪家好阳泉集团网站建设
  • 电子商务网站怎么做素材包wordpress 浮窗
  • 海东企业网站建设公司南村网站建设
  • 宁波市高等级公路建设指挥部网站扁平化设计网站
  • e建网站网站设置访问权限
  • 查找(无序线性、有序线性、二分查找)
  • 不同规模企业如何选择与进化营销费用管理?
  • 备案期间网站中小企业
  • .gitignore配置了忽略dist文件夹,但是souretree还是跟踪了dist文件夹的变化怎么解决
  • 网站开发总出现出现404做网站有哪些技术
  • 突破协议壁垒:CCLINK转EtherNet/IP在大型温室罗克韦尔PLC伺服通讯中的实践
  • edu网站一般谁做的网站的seo怎么做
  • 手机触屏网站微信低代码开发平台