操作系统——进程线程

一:操作系统简述

定义:用来管理计算机硬件以及软件资源的计算机程序

计算机组成:存储器+控制器+运算器+输入设备+输出设备
其中 CPU=控制器+运算器

操作系统的功能
1:进程以及线程的管理:进程以及线程的状态,进程通信,线程同步,资源调度等
2:存储管理:内存的分配以及回收,地址转换,存储保护等
3:文件管理:文件目录,文件操作,文件存取控制等
4:设备管理:设备驱动,分配回收,缓冲技术等
5:用户接口:系统命令,编程接口
操作系统的应用
1:资源的管理者
2:向用户提供各种服务
3:对硬件机器的扩展
操作系统的特性
1:并发性

两个或者多个程序在同一时间间隔执行,宏观上是同时执行,微观上是交替执行
这里要注意一下并发性和并行性之间的区别:
并行性:指的是两个程序或者是多个程序在同一时刻同时进行。
如果是单核CPU的话,只存在并发性,不存在并行性;但是多核CPU可能并发性和并行性同时存在。
在这里插入图片描述

2:共享性
这里说的共享性也就是资源共享,也就是系统中的资源可以同时供内存中多个并发的程序同时使用。

分类:
1:互斥访问:系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源——使用QQ和微信视频。同一段时间内摄像头只能分配给其中一个进程
2:同时访问:某种资源在一段时间内并发地访问多个程序,“同时”指在宏观上是同时的,在微观上是交替进行访问的,只是cpu处理速度很快,我们感觉不到,在宏观上感觉是在同时进行

3:虚拟性
把一个物理实体变成若干个逻辑上面的对应物:只要的实现方式有时分复用以及空分复用
4:异步性

多道程序环境允许多个程序并发执行,但由于资源有限,进程的执行并不是一贯到底的,而是走走停停的,它以不可预知的速度向前推进,描述这种以不可预知的速度走走停停,何时开始何时结束未知的这种状态叫做异步

比如这个打印机的案例:谁都不知道A释放打印机之后,是b抢占到打印机的资源还是C抢占到打印机的资源,这种不可预知就是异步
在这里插入图片描述

二:进程和线程

对于进程以及线程的一些简单概念,可以参考:http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html

进程以及线程的区别
进程线程
资源分配的最小单位资源调度的最小单位
进程之间相互独立,并且每个进程有自己的内存空间线程没有,它所使用的资源来源于进程中
操作系统中同时运行一个或者多个进程进程中可以同时运行一个或者多个线程,线程又称为轻量级进程
进程开销大线程相对较小
进程控制块(PCB)线程控制块(TCB)
进程的状态
  • 创建:创建的时候已经拥有了PCB(进程控制块),但是其他资源还没有准备就绪
  • 就绪:其他资源都已经分配好了,只剩下CPU没有进行分配
  • 执行:CPU和其他资源都已经准备就绪
  • 阻塞:进程因为某种原因而放弃CPU的状态,比如资源没有到位导致运行不下去;等待资源到位转为就绪状态,获得CPU之后又可以继续运行
  • 终止:执行完毕,归还CPU的状态
    在这里插入图片描述
进程之间的通信

什么是进程之间的通信?
每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信

常用的通信方法:

1:管道存在于内存中,进程可以对它进行读写,它提供流控制,保证进程的正确读写,即管道为空时读进程会阻塞,管道为满时写进程会阻塞,以此实现进程之间的通信
分类:
普通管道pipe:半双工通信,单向通信,只能在父子进程之间使用
命名管道FIFO:半双工通信,没有进程关系限制,可以在无关进程之间进行通信
2:消息队列MessageQueue:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
3:共享存储SharedMemory:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。是进程通信中最快的一种方式
4:信号量Semaphore:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
5:套接字Socket:套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

进程/线程之间的同步

对竞争资源在多个进程间进行使用次序的协调,使得并发执行的多个进程之间可以有效的时候资源和相互合作
同步就是协同步调,按预定的先后次序进行运行

同步的四大原则

  • 空闲等待:这个临界资源没有被占用,操作系统应该允许进程使用这个资源
  • 忙则等待:如果有进程占用这个资源,那么接下来请求这个资源的进程就应该等待
  • 有限等待:就是临界资源被占用,但是要保证请求的进程在有限的时间之内能使用到这个进程,避免一直等待
  • 让权等待:等待临界资源的进程在等待的过程中应该让出CPU的使用权,也就是从运行状态转换为阻塞状态

线程同步的方法

  • 临界区(Critical Section):在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。

  • 互斥量 (Mutex):适合不同进程内多线程访问公共区域或代码段时使用,与临界区相似。

  • 事件(Event):通过线程间触发事件实现同步互斥

  • 信号量(Semaphore):与临界区和互斥量不同,可以实现多个线程同时访问公共区域数据,但是需要限制在同一时刻访问此资源的最大线程数目,原理与操作系统中PV操作类似,先设置一个访问公共区域的线程最大连接数,每有一个线程访问共享区资源数就减一,直到资源数小于等于零。

进程调度

计算机通过决策决定哪个就绪进程可以获得CPU使用权

调度机制的算法:

1:先来先服务调度算法
:2:短进程优先调度算法 :优先选择运行时间短的进程,但是不利于长作业进程的操作,得等到短进程运行结束之后再运行
3:高优先权优先调度算法 :进程附带优先权,调度程序优先选择权重高的进程,比如前台进程的优先级会高于后台进程
4:时间片轮转调度算法:按照先来先服务的原则排列就绪进程,每次从头部取出待执行进程,分配一个时间片执行
5:多级反馈队列调度算法:不必事先知道各种进程所需的执行时间,而且还可以满足各种类型进程的需要,因而它是目前被公认的一种较好的进程调度算法

死锁

两个或者两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象,若无外力作用,他们都将无法推进下去

产生死锁必须满足以下几个条件(四个条件全都满足):

互斥条件:每次资源只能被一个进程利用,要使用这个资源只能等待这个资源被释放
请求保持条件:进程至少保持一个资源,又提出新的资源请求;并且新的资源被占用,只能处于阻塞状态;同时这个被阻塞的进程不释放自己保持的资源
不可剥夺条件:进程获得的资源在未完成之前不可被剥夺,获得的资源只能由进程自身释放
环路等待条件:发生死锁的时候,存在进程-资源环形链

预防死锁的方法:
破坏请求保持,不可剥夺,环路等待三个条件之一即可

破坏请求保持条件:系统规定进程运行之前,一次性申请所有需要的资源;所以就不需要在运行的过程中再申请新的资源而产生等待的情况
破坏不可剥夺条件:当一个进程请求新的资源得不到满足的时候,必须释放所占有的资源,也就是在运行的时候占有的资源可以被释放,意味着可以被剥夺
破坏环路等待条件:可用资源线性排序,申请必须按照需要递增申请,线性申请不在形成环路,而是线型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值