现代操作系统——进程和线程

1.进程

概念:对正在运行程序的一个抽象。
伪并行:由于CPU在各个进程中的切换时间很短(几十毫秒到几百毫秒),所以在1s内它可以运行多个进程,这样就产生了并行的错觉。这就是说一个CPU在一个时间点只能运行一个进程,在下一个时间点切换到另外一个进程,造成同时运行的错觉。
进程和程序:程序就是一些代码,用一些语言来描述算法的代码,当cpu等硬件系统去运行这个程序的时候就变成了进程。一个程序运行两次就是两个进程,就是你两次打开浏览器,你关闭一个,并不影响另外一个的运行。
进程的创建:新的进程是由于一个已经存在的进程执行一个用于创建进程的系统调用而创建的。在UNIX系统中,只有系统调用( fork)能创建新的进程,这个系统调用是创建一个与父进程相同的副本。Windows系统中正好相反,win32函数调用createprocess完成创建新的进程,并且把新的进程的相应程序装入新创建的进程中,进程的创建过程父子进程拥有不同的地址空间。
进程的终止:出错或者是正常退出或者是被其他进程杀死等,在UNIX中使用exit(退出),kill(杀死)进程,而win32 是EXitproccess(退出),Terminateprocess(杀死).
进程运行的三种状态:运行,就绪,阻塞。其中阻塞是需要某种外部事件来触发运行,不然即使cpu空闲也不会去运行的程序。
多道程序设计模型:采用多道设计模型可以提高CPU的利用率。

2.线程

概念:传统的操作系统中,一个进程就有一个地址空间和一个控制线程,事实上,经常存在一个地址空间中准并行多个线程,这些线程就是分离的进程,(不过在同一个地址空间)。 创建线程比创建进程快的多。线程的一个最大的优势就是可以共享可用数据的能力。
进程是把资源集合到一起,线程就是cpu执行的实体。
线程的设计考虑:1父进程有多个线程,子进程在共享这些线程后,父进程遇到阻塞,子进程是不是也要相应的阻塞么?2一个线程发现内存不够,分配新的内存,运行过程中,切换线程,导致新的线程也申请内存问题。
用户空间实现线程的方式:用户空间中和内核中。用户空间实现的话就可以在不支持线程的操作系统中实现线程的使用。需要考的问题有:如何实现阻塞系统调用,页面故障问题。由于线程不存在时间中断的问题,所以线程自动放弃CPU也是个问题。由于内核在线程中的一些关键点上优于用户级线程,但是其速度慢也是必须的,所以这就产生了 调度程序激活机制。

3.进程间通信

进程间的通信会产生的问题:1.如何通信,2.解决竞争问题3.进程执行的顺序问题
竞争问题的产生:多个进程同时读写共享数据。解决方法:1.屏蔽中断 2.锁变量3.严格轮换法4.Peterson解法5.TSL指令(需要硬件支持)6.信号量7.互斥量(这些方法的主要思想是让一个进程在全局变量中操作数据时,其他的进程就不能进入,直到该进程数据操作结束,其他进程才可以进入)
由于上述方法有些是在连续内存中共享数据,但万一共享的数据不再连续的内存中,如何解决?1. 把部分共享数据放在内核中 ,2. 让进程和其他进程共享部分地址空间 。但是如果进程共享大部分的地址空间,这就导致进程和线程的概念变得模糊起来。
管道:由于信号量的使用容易出错,所以提出了高级同步语言,管道。管道有一个重要的特性:一个时刻,管道中只能有一个活跃进程。
消息传递:在进程通信的过程中用两条语句来进行通信:send和receive。一个发送信息,一个接收信息。
屏障:这个是用于进程组而不是用于双进程的。举个例子:在 一个程序中,我们希望所有的进程都执行完这一步之后才能进入下一个阶段,否则所有进程一直等待直到最后一个进程完成了这一阶段的过程,我们可以使用屏障来处理。
TSL指令:这是一条汇编指令:TSL RX, LOCK,测试并加锁, 意思是在该指令结束前任何处理器都不能访问该内存字。
XCHG指令:这条汇编指令的意思是交换两个内存地址的内容。

4.调度

概念:当计算机系统是多道程序设计系统,则多个进程会竞争CPU,这样就需要一个调配程序告诉CPU在哪个时间点执行哪个进程,这就是调度。
计算密集型和i/o密集型:这个指的是在进程过程,计算机是花大量的时间在计算上还是花大量的时间在等待I/O上。
调度算法:1.批处理2.交互式3.实时     交互式系统需要抢占资源,省的CPU被一个进程一直调用,而实时系统在抢占资源上则不是必须的,实时系统和交互式系统的主要差别是实时系统只运行那些用来推进现有应用的程序,而交互式系统是通用的,它可以运行任意的非协调的程序。
批处理系统的调度:1.先来先服务2.最短作业优先3.最短剩余时间优先(类似于最短作业优先)
交互式系统的调度:1.轮转调度2.优先级调度3.多级队列4.最短进程优先5.保证调度6.彩票调度7.公平分享调度
轮转调度:每个进程平均分时间段去使用CPU,这样倒是管理时间很久,浪费和大
优先级调度:每个进程都有一个优先级别,级别高的有权先调度,级别低的用后面再调度。
最短进程优先:最短进程优先就会有最短响应时间。
保证调度:向用户做出明确的调度保证,然后去实现它。
彩票调度:改进版的彩票调度,向每个进程提供的各种系统资源的彩票,一旦要做出决策时,就随机抽取一张彩票,拥有该彩票的进程获得该资源,得到CPU的应用时间。
公平分享调度:这个是为了改善不同用户间的进程而设置的。

5.经典的IPC问题

1.哲学家就餐问题:解决方法:每个哲学家只有在左右两个邻居没有就餐时才可以就餐就还可以避免饥饿和死锁问题。







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值