1、操作系统概述


操作系统概念:操作系统是系统资源的管理者,是管理计算机硬件与软件资源的计算机程序。提供给用户和其他软件方便易用的接口和环境。最接近硬件的软件。

例子
用qq和朋友视频聊天
step 1、在文件夹中找到qq安装位置(如d:/qq) — 逐层打开文健夹
stpe 2、双击qq.exe — 需要把程序相关数据放入内存
step 3、qq正常运行 —- 对应进程被处理机(cpu)处理
step 4、qq聊天 — 需要将摄像头分配给进程

补充:执行一个程序前,需要将该程序放入到内存中,才能被cpu处理

作为系统资源的管理者,主要提供以下功能: 1 、处理机管理 2、存储器管理 3、文健管理 4、设备管理
作为管理者向用户提供的接口:1、GUI图形管理界面 2、交互式命令接口 3、脱机批处理接口
作为管理者向应用软件提供接口: 1、系统调用接口

操作系统作为最接近硬件的层次对硬件机器进行了扩展:将cpu、硬盘、磁盘、内存等硬件资源进行协调配合。实现了很多复杂的功能。

2、操作系统的特征

  • 1、并发
    微观上交替执行,宏观上同时运行。与并行区别是两个或者多个时间同一时间发生。容易混淆。

重点:
单核cpu同一时刻,只能运行一个程序。各个程序只能并发的执行。
多核cpu同一时刻,可以运行多个程序。各个程序可以并发执行。

  • 2、共享
    互斥共享方式:一个时间段内只允许一个进程访问该资源。
    同时共享方式:允许同一个时间内多个进程同时对他进行访问。
    所谓的同时共享往往是宏观上的,而微观上,有的进程可能是真的在进行同时共享,如扬声器被音乐和游戏同时占用。

并发和共享互为存在条件。

  • 3、虚拟
    虚拟技术:将一个物理实体,通过某种方式映射到多个逻辑实体上。
    背景:gta5要4g内存,qq什么的要1g内存。电脑是4g内存,为什么还能够同时运行呢?
    答:这就是虚拟储存器技术,实际的只有4g的内存。运用了虚拟技术中的“空分复用技术”
    既然一个程序要分配cpu才能运行。那为什么单核cpu能够同时运行多个程序呢?
    答:这是虚拟处理器技术,这就是虚拟技术中的“时间分片技术”。微观上处理机在各个微小时间内交替着为各个进程服务。

  • 4、异步
    异步是指进程以不阻碍其他进程的方式运行。由于资源有限,以不可预知的速度向前推进。

3、操作系统的发展与分类

4、操作系统的运行机制


cpu有两种工作状态,用户态和内核态。
内核态只能运行内核代码,可以执行特权指令,用户态只能运行用户代码,只能执行非特权指令。

扩展:cpu中有一个寄存器叫做程序状态寄存器(psw),其中有一个二进制位,1表示内核态,0表示用户态。

用户态、内核态的切换过程:
1、刚开机时,cpu处于内核态,此时运行的是操作系统代码。
2、开机完成后,cpu处于用户态,此时运行的是用户代码。
3、操作系统会在合适的时候让出cpu。让应用程序在cpu上运行。操作系统内核在让出cpu之前。会用一条特权指令把psw中的1变成0,进入用户态。
4、应用程序运行在用户态
5、此时,如果有人企图加入一条特权指令。破坏系统。
6、cpu接下来会发现要执行的指令是特权指令,此时又是在用户态
7、这个非法事件会引发一个中断信号—cpu检测到中断信号后,会立即变位内核态,并停止运行当前的应用程序。转而运行处理中断信号的内核程序
8、中断会使操作系统夺回cpu的控制权
9、操作系统会对引发的中断事件进行处理,处理完了再将cpu的使用权给应用程序

除了非法的使用特权指令之外,还有很多事件也会触发中断信号,但凡需要操作系统介入的地方,都会触发中断信号

5、操作系统的中断和异常

5-1、中断的作用


cpu上会运行两种程序,一种是操作系统内核程序,另一种是应用程序程序。
没有中断技术就没有并发,没有中断技术就没有系统。
中断是操作系统内核夺回cpu控制权的唯一途径。
内核态->用户态;执行一条特权指令–修改psw,让出cpu的控制权交给用户
用户态->内核态;由中断引发,硬件自动完成变态过程。

  • 中断的类型
    内中断(异常):由cpu执行指令引发的。
    例子:1、试图在用户态下执行特权指令
    2、执行除法指令发现除数为0
    3、有时候想要执行一些内核服务,此时会执行一条特殊的指令,陷入内核,该指令会引发一个中断信号。

外中断(中断):由当前执行的指令无关,由外部设备引发的。
例子:1、时钟中断–时钟每走一次,就会引发一个中断信号,用来并行运行程序。
2、键盘中断–键盘每按下一个键,就会引发一个中断信号,用来并行运行程序。

中断机制的基本原理

5-2、系统调用


为什么要使用系统调用?
例程:假设打印店由两个人都点击了打印,两个进程没人管理,就会出现打印混乱。
而操作系统就是来管理这两个进程的。

系统调用分类(按功能):设备管理、文件管理、进程管理、进程通讯、内存管理
扩展:可搜索linux系统调用有哪些

系统调用是怎么实现的,运行在用户态的程序在执行了某些系统调用的接口之后,会将后面携带的参数放到指定的寄存器中,最后指向一个陷入指令(psw),发生中断,陷入内核态。执行系统调用。通过第一个参数,就可以知道要进行那种类型的系统调用

6、操作系统体系结构



原语:最小的不可再分的程序单元。是一种特殊的程序,处于系统的最底层,最接近硬件的部分,这种程序的运行具有原子性,不可被中断。运行时间较短,调用频繁。

大内核:会对操作系统的性能产生影响。
注意:
操作系统内核运行在内核态,应用程序运行在用户态。

7、操作系统的引导boot

8、虚拟机

虚拟机就是让多个系统能够跑在同一个物理硬件上。需要硬件支持。
使用的是虚拟化的技术。需要虚拟机管理程序管理(vmm),将硬件资源划给虚拟机。每个操作系统都有独立的资源。

9、操作系统进程


在linux内核源码中,sched.h中定义了进程控制块的结构体:tast_struct





上图中,值得注意的是,引入线程后,进程将不再是接受调度的基本单位。线程才是。

9-1、进程的转换

进程创建的时,它的状态就是“创建态”,在这个阶段,操作系统会为它分配资源,初始化pcb。

当程序创建完成,会进入就绪态。但是这个时候没有空闲cpu,所以不会运行。

当一个进程被调度到cpu上运行,此时会进入运行态
如果这个进程要请求使用某个设备,而这个设备被其他进程占用了,此时这个进程会进入阻塞态
当这个设备空闲下来,此时会进入就绪态。给进程分配这个设备。



操作系统对进程的组织有两种方式,一种是链接表,一种是索引表。
一般的操作系统使用的是链式表。

9-2、进程控制





处理机:运行指令的实体,可以是cpu也可以是其他硬件。

9-3、进程通信

进程通信需要操作系统的支持。
原因:进程是分配资源的基本单位,为了保证各个进程之间不会互相影响。只能访问自己的内存空间和资源。

进程通信的方式:主要三种:管道、共享存储、消息通信

  • 共享存储:在内存中划出一块区域,多个进程都可以访问。如linux,使用int shm_open()创建共享内存。
    void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);将共享内存映射到自己的进程的地址空间。
    这个时候,内存中会出现一个“段表项”,除开栈,堆外的新增区域。对这个内存区域访问需要加锁,防止冲突。
    共享存贮有两种办法:

  • 消息通信:进程之间通过操作系统提供的消息传递机制来实现数据交换。有原语控制
    消息主要由消息头和消息体组成。消息头中包含消息长度、进程id,消息体中包含消息内容。
    消息传递两种方式:直接通信方式和间接通信方式。
    直接通信方式:直接将消息发送给目标进程。指明id
    间接通信方式:将消息发送到某个中间实体中,然后目标进程从这个中间实体中取出消息。
    直接通信由内核控制的进程pcb中有一个消息队列。所有收到的消息都会放在这个队列中。

间接通信方式:将消息发送到某个中间实体中,然后目标进程从这个中间实体中取出消息。就是会创建一个信箱。一个进程可以创建多个信箱。

  • 管道通信:管道是是单向的,只能由一个进程向管道中写入数据,只能由管道中的另一个进程读取数据。就是一个循环队列。本质就是内存缓冲区。
    和共享内存相比,区别是不能进行自由操作。是先写的先读。