一、操作系统演进
-
无操作系统(人工)-资源利用率低
-
批处理系统(批量)-资源利用率提升、多道程序设计
-
分时系统(人机交互)-资源利用率大幅提升、及时调试程序
多道程序设计:计算机内存中同时存放多个程序
对多道程序设计的管理是操作系统的重要功能
五大功能:
-
进程管理(进程实体、5状态模型、进程同步、Linux)
-
作业管理(作业进程调度、死锁管理)
-
存储管理(内存分配回收、段页式存储管理、虚拟内存、Linux)
-
文件管理(操作系统、Linux文件系统、基本操作)
-
设备管理(操作系统设备)
二、操作系统概览
1.操作系统定义:
管理硬件、提供用户交互的软件系统
-
操作系统是 管理计算机硬件和软件资源的计算机程序
-
管理配置内存、决定资源供需顺序、控制输入输出设备等
-
提供让用户和系统交互的操作界面
-
种类多样,不局限于计算机
2.操作系统基本功能:
![](https://img-blog.csdnimg.cn/20210228221040754.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BvbW91dGFvOTE1MQ==,size_16,color_FFFFFF,t_70)
-
操作系统统一管理着计算机资源
-
处理器资源、存储器资源、IO资源、文件资源
-
-
操作系统实现了对计算机资源的抽象
-
操作系统提供了用户与计算机之间的 接口
-
图像窗口、命令、系统调用形式
-
3.操作系统相关概念:
-
并发性(事件)
-
并行——两个/多个事件可以在 同一时刻发生
-
并发——两个/多个事件可以在 同一个时间间隔发生
-
单处理器:并发关系
-
双处理器:并行关系
-
-
共享性(资源共享)
-
互斥共享模式(A用时,其他等待)——打印机
-
同时访问(宏观,一段时间内并发使用)
-
-
虚拟性(时/空)
-
时分复用技术(资源在时间是,不同程序并发使用)——虚拟 处理器技术、虚拟 设备技术(spooling)
-
空分复用技术——虚拟 磁盘技术、虚拟 内存技术
-
-
异步性
-
允许多进程进行并发执行
-
程序的执行是走走停停的
-
进程以不可预知的速度向前推进
-
三、进程管理
-
进程是系统进行资源分配和调度的基本单位
-
进程作为程序独立运行的载体保障程序正常执行
-
进程的存在使得操作系统利用率大幅提升
1.进程实体:
进程实体——进程控制块(
PCB,常驻内存)
-
标识符
-
状态
-
优先级
-
程序计数器(寄存器)
-
内存指针(程序代码,进程相关数据地址)
-
上下文数据(进程执行时处理器存储的数据)
-
IO状态信息
-
记账信息
-
...
进程Process与线程Thread
-
一个进程可以有多个线程,是进程中实际运行工作的单位
-
线程是操作系统进行运行调度的最小单位
-
进程中的线程共享资源
-
线程读写同一进程的数据通信
![](https://img-blog.csdnimg.cn/20210228221040894.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BvbW91dGFvOTE1MQ==,size_16,color_FFFFFF,t_70)
2.进程5状态模型:
-
创建(拥有PCB但其他资源尚未就绪,fork)
-
就绪(分配到除CPU以外的所有必要资源)
-
就绪队列(多个就绪进程)
-
-
执行(进程在CPU中运行)
-
阻塞(因某种原因而放弃CPU的状态,如其他设备未就绪)
-
阻塞队列(多个阻塞进程)
-
-
终止(处于系统清理或归还PCB)
![](https://img-blog.csdnimg.cn/20210228221040904.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BvbW91dGFvOTE1MQ==,size_16,color_FFFFFF,t_70)
3.进程同步:
进程同步——
-
对竞争资源在多进程间进行使用次序的协调
-
使得并发执行的多个进程之间可以有效使用资源和相互合作
-
举例:
-
生产者-消费者问题:操作缓冲区步骤
-
register = count; register = register +1; count = register
-
-
哲学家进餐问题:操作步骤
-
拿起左边筷子; 等待右边筷子释放; 拿起右边筷子; 进餐
-
-
-
问题:彼此之间没有通信
-
临界资源定义:临界资源指的是一些虽作为共享资源却又无法同时被多个线程共同访问的共享资源。当有进程在使用临界资源时,其他进程必须依据操作系统的同步机制等待占用进程释放该共享资源才可重新竞争使用共享资源。
进程同步原则
-
空闲让进:资源无占用,允许使用
-
忙则等待:资源有占用,请求进程等待
-
有限等待:保证有限等待时间能够使用资源
-
让权等待:等待时,进程需要让出CPU
进程同步方法
-
消息队列
-
存储共享
-
信号量
线程同步方法——进程内多线程也需要同步
-
互斥量
-
读写锁
-
自旋锁
-
条件变量
4.进程管理:
进程的类型
-
前台进程:可以和用户交互(占用终端)的进程
-
后台进程:没有占用终端(命令以&结束),优先级比前台进程低
-
守护进程:特殊后台进程,守护进程在系统引导时启动,(crond、sshd、httpd、mysqld等)
进程的标记
-
进程ID:进程的唯一标记 (ID为0是idle进程)
-
进程状态标记
![](https://img-blog.csdnimg.cn/20210228221040904.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BvbW91dGFvOTE1MQ==,size_16,color_FFFFFF,t_70)
linux命令
(ps现实当前进程状态)(top查看进程状态)
线程间同步:互斥量(保证关键操作的原子性)、自旋锁(反复检查锁可用,死循环等待锁)、读写锁(单个写入,多个读取)、条件变量(复杂情况,睡眠唤醒)
进程间同步:共享内存、域套接字、消息队列、信号量
(1)生产者-消费者问题
-
互斥量(加锁解锁,睡眠唤醒)
-
自旋锁(循环等待,加锁解锁)
-
自旋锁不会引起调用者睡眠,线程效率远高于互斥锁
-
节省了上下文切换的开销,不适合单核
-
-
读写锁(读操作可以多个访问,写操作只能唯一访问)
-
适用临界资源多读少写的情况
-
提高效率
-
-
条件变量(睡眠唤醒,与互斥量一同使用)
-
互斥量开始,锁住操作
-
操作内,加条件循环,在内等待另一方
-
操作完,通知另一方
-
互斥量结束
-
![](https://img-blog.csdnimg.cn/20210310215456841.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BvbW91dGFvOTE1MQ==,size_16,color_FFFFFF,t_70)
进程同步(进程共享计算机资源)
fork系统调用
-
创建进程,为其分配资源
-
创建的进程初始化状态和父进程一样
-
返回两次
-
子进程id(父进程返回值)
-
0(子进程返回值)
-
共享内存(允许不相关的进程访问同一片物理内存,快速在进程间传递、共享数据)
-
申请、连接、使用、脱离&删除共享内存
-
共享内存存在一个变量
Unix域套接字(socket,不需要维护和管理内存)
-
单机、简单可靠的进程通信同步服务
-
只能单机使用,不能跨机器使用
-
server 创建、绑定、监听、接收&处理信息
-
client 创建、连接、发送信息
-