操作系统:管理计算机硬件和软件资源的计算机程序,提供一个计算机用户和硬件系统的接口,向上对用户程序提供接口,向下接管硬件资源。
其本质也是一个软件,作为最接近硬件的系统软件,负责CPU管理、存储器管理、设备管理、文件管理、提供用户接口。
分类?
批处理、分时、实时。
如果兼顾批处理和分时则称为通用操作系统。
通用操作系统有:Linux,MacOS、Windows
内核态和用户态
目的:避免操作系统和关键数据被用户程序破坏。
内核态:操作系统管理程序执行时所处的状态,能够执行特权指令在内的所有指令,能够访问系统所有存储空间。
用户态:用户程序执行时处理器所处状态,不能执行特权指令,只能访问用户地址空间。
用户程序运行在用户态,操作系统内核运行在内核态
如何实现内核态用户态的切换?
系统调用、异常、外部中断
系统调用:操作系统的最小功能单位,是操作系统提供的用户接口
异常:也称内中断,是由错误引起的,如文件损坏缺页故障等
外部中断:用于通知处理器,外设的状态变化
并发并行的区别:
并发:宏观上多个程序同时运行,微观上同一时刻只有一个程序在运行
并行:同一时刻多个程序在运行
什么是进程?
进程是资源分配的基本单位,是独立运行的基本单位,进程的经典定义是:一个执行中程序的实例
进程由进程控制块PCB、数据段、程序段组成。
其中进程控制块PCB是进程存在的唯一标志,包括进程标识符PID,进程当前状态、程序和数据地址、进程优先级、CPU现场保护区(用于进程切换)、占有的资源清单等。
进程间通信
每个进程都有各自的用户地址空间,因此进程间通信要经过内核,在内核开辟一块缓冲区,A把数据从用户空间拷贝到缓冲区,B把数据从缓冲区拷贝到用户空间
通信本质:进程间通过一个公共资源进行通信,而根据这个公共资源的提供者不同造就了不同的通信方式
进程间通信主要有:管道、系统IPC【 Inter-Process Communication,进程间通信】(消息队列、信号量、信号、共享内存等)、套接字socket
进程如何通过管道进行通信
管道是最基本的IPC机制,作用于有血缘关系的进程之间,完成消息传递。
调用ippe()函数就可以创建管道。
管道特质:
1. 其本质是一个伪文件(实为内核缓冲区
2. 由两个文件描述符引用,一个表示读端,一个表示写端。
3. 规定数据从管道的写端流入管道,从读端流出。
管道过程:
(1)父进程创建管道,得到两个⽂件描述符指向管道的两端
(2)父进程fork出子进程,⼦进程也有两个⽂件描述符指向同⼀管道。
(3)父进程关闭fd[0],子进程关闭fd[1],即⽗进程关闭管道读端,⼦进程关闭管道写端(因为管道只支持单向通信)。⽗进程可以往管道⾥写,⼦进程可以从管道⾥读,管道是⽤环形队列实现的,数据从写端流⼊从读端流出,这样就实现了进程间通信。
管道局限性:
1.只能一端读一端写
2.数据一旦读走,便不在管道中存在,不可反复读取
3.半双工通信,因此数据只能在同一方向流动
4.只能在有公共祖先的进程间使用管道
进程如何通过共享内存进行通信
共享内存通信,是使多个进程可以同时访问同一个内存空间,需要同步处理,如互斥锁、信号量
特点:
1.最快的IPC机制,因为直接对内存进行操作,避免数据在用户空间和内核来回切换
2.可以多个进程同时操作,因此需要同步处理
3.通常使用信号量来搭配共享内存
信号?
一条用于通知进程系统发生了某种类型事件的一条小消息