
操作系统要向上提供对应的服务
操作系统,不相信任何用户或者人;------------银行------窗口
因此提供了****系统调用,(函数调用)-->用户和操作系统之间进行某种数据交互
一:系统调用
计算机的各种硬件资源是有限的,为了更好的管理这些资源,用户进程是不允许直接操作的,所有对这些资源的访问都必须由操作系统控制。为此操作系统为用户态运行的进程与硬件设备之间进行交互提供了一组接口,这组接口就是所谓的系统调用。
系统调用实质上就是函数调用,只不过调用的是系统函数,处于内核态而已。 用户在调用系统调用时会向内核传递一个系统调用号,然后系统调用处理程序通过此号从系统调用表中找到相应的内核函数执行,最后返回。
二:进程
课本概念:程序的一个执行实例,正在执行的程序等
内核观点:担当分配系统调用资源(cpu时间,内存)的实体。
进程=PCB(task_struct)+自己的代码和数据
进程控制块(PCB)详解
进程控制块(process ctrl block)是操作系统为了管理进程设置的一个专门的结构体 task_struct。
操作系统用它来记录进程的外部特征,描述进程的运动变化过程。同时,系统可以利用PCB来控制和管理进程。
那么进程控制块(即 task_struct结构体)都包含了哪些信息?

man getpid(进程ID)------>2号手册,系统调用
普及:man手册 3号手册,库调用
man man

man getpid


三、进程切换
(1).死循环进程是如何运行
a.一旦一个进程占有CPU,会把自己的代码跑完吗?---不会
时间片的东西
所以,什么是时间片呢?
时间片:是操作系统调度任务的基本单位,指一个任务在CPU上连续执行的时间段。通过将CPU时间划分为多个小片段,操作系统可以在多个任务之间快速切换,实现多任务并发执行。
主要特点
-
**固定长度**:每个时间片的长度通常固定,由操作系统决定。
-
**轮流执行**:任务按顺序获得时间片,依次执行。
-
**抢占式调度**:任务在时间片用完后会被暂停,切换到下一个任务。
优点
-
**公平性**:所有任务都能获得CPU时间。
-
**响应性**:快速切换任务,提升系统响应速度。
-
**多任务支持**:允许多个任务看似同时运行。
缺点
-
**上下文切换开销**:频繁切换任务会增加系统开销。
-
**任务延迟**:长任务可能需要等待多个时间片才能完成。
示例
假设时间片为10ms,系统中有三个任务A、B、C:
-
任务A运行10ms后暂停,切换到任务B。
-
任务B运行10ms后暂停,切换到任务C。
-
任务C运行10ms后暂停,重新切换到任务A。
通过这种方式,系统实现了多任务的并发执行。
死循环进程,不会打死系统,不会一直占有CPU!
(2)聊聊cpu,寄存器
a.cpu中会有很多的寄存器--即寄存器就是CPU内部的临时空间,保存着进程的代码和数据
b.寄存器!=寄存器里面的数据,寄存器的内容是变化的,多份的

(3)如何切换
a.故事:
b.具体:进程切换的本质是:保存和恢复当前进程的硬件上下文的数据,即cpu内寄存器的内容

所以:当前进程要把自己的进程硬件上下文数据保存起来,那么保存哪里去了?
答案:保存到进程的task_struct里面!!TSS:任务状态段

四:调度
Linux真实的调度:O(1)调度算法
调度器:
调度器是操作系统中的一个关键组件,负责管理和分配CPU资源给系统中的任务(如进程或线程)。它的核心目标是决定哪个任务在何时使用CPU,以实现高效、公平的系统运行。
调度器的主要功能
- **任务选择**:
-
从就绪队列中选择下一个要运行的任务。
-
根据调度算法(如先来先服务、轮转调度、优先级调度等)做出决策。
- **资源分配**:
-
分配CPU时间片给选中的任务。
-
确保所有任务都能公平或按优先级获得CPU资源。
- **上下文切换**:
-
在任务切换时保存当前任务的运行状态(如寄存器、程序计数器等)。
-
恢复下一个任务的运行状态。
- **响应性和效率**:
-
确保系统对用户输入或外部事件能够快速响应。
-
最大化CPU利用率,减少空闲时间。
调度器的类型
- **长期调度器(作业调度器)**:
-
决定哪些任务可以进入就绪队列。
-
控制系统的并发任务数量。
- **中期调度器**:
-
负责将任务从内存中换出(挂起)或换入(恢复)。
-
主要用于内存管理。
- **短期调度器(CPU调度器)**:
-
决定哪个任务获得CPU时间。
-
是最常用的调度器,负责频繁的任务切换。
常见的调度算法
- **先来先服务(FCFS)**:
-
按任务到达的顺序分配CPU。
-
简单但可能导致"饥饿"现象。
- **短作业优先(SJF)**:
-
优先运行预计执行时间最短的任务。
-
可以减少平均等待时间,但可能导致长任务等待过久。
- **轮转调度(RR)**:
-
每个任务分配一个固定长度的时间片,轮流执行。
-
公平且响应性好,适合交互式系统。
- **优先级调度**:
-
根据任务的优先级分配CPU。
-
可能导致低优先级任务"饥饿"。
- **多级反馈队列(MLFQ)**:
-
结合多种调度算法,动态调整任务的优先级和时间片。
-
兼顾响应性和公平性。
调度器的工作流程
-
任务进入就绪队列。
-
调度器根据算法选择下一个任务。
-
调度器执行上下文切换,将CPU分配给选中的任务。
-
任务运行,直到时间片用完、阻塞或完成。
-
调度器重复上述过程,选择下一个任务。
调度器的重要性
-
提高CPU利用率,减少资源浪费。
-
确保系统公平性和响应性。
-
支持多任务并发执行,提升用户体验。
简单来说,调度器就像是操作系统的"交通警察",指挥任务有序运行,确保系统高效、稳定地工作。

活跃进程:


五:分时操作系统和实时操作系统
分时操作系统(Time-Sharing OS)和实时操作系统(Real-Time OS)是两种不同的操作系统类型,设计目标和应用场景有显著区别。以下是它们的主要差异:
汽车实时操作系统:比如刹车
