Short introduction in Operating Systems concept
Process Concept
Process Scheduling
Operations on Processes
Inter-process Communication
谢谢你的反馈!让我来更详细地阐述每一张图片中的内容,确保包括所有知识点:
一、Operating System 操作系统
1. 操作系统是用户与硬件之间的接口:an environment "architecture”
2. 简化用户使用,隐藏繁琐细节:hides the tedious stuff
• 操作系统通过管理底层硬件资源,减少了用户的工作负担。用户无需关注每个硬件细节,而专注于更高层的应用任务。
3. 提高效率,避免浪费周期,支持并行活动:parallel activity, avoids wasted cycles
• 操作系统支持任务的并行执行,最大化利用CPU的时间,减少空闲周期的浪费。
4. 提供信息保护
5. 为每个用户分配一部分资源:
• 在多用户操作系统中,操作系统根据每个用户的需求动态分配系统资源,如CPU时间、内存等。
6. 作为控制程序:control program
• 操作系统充当计算机系统的核心控制程序,管理硬件和应用程序的交互。
1. 操作系统架构
1. 用户与硬件的交互:
• 通过操作系统,多个用户可以同时与计算机硬件交互,每个用户的程序运行在一个隔离的环境中,保证不互相干扰。
2. 程序接口与操作系统接口:
• 用户通过程序接口与操作系统交互,操作系统则通过硬件接口与计算机硬件进行交互。
3. 应用程序与系统程序:
• 应用程序如编译器、编辑器与操作系统配合使用,完成用户请求的任务。
2. 操作系统的特性
1. 时间共享:(Time sharing)
• 操作系统通过时间共享技术,让多个用户能够同时使用计算机系统,利用时间片轮转实现并发执行。
2. 多处理器系统(Multiprocessing):
• 多处理器系统使用多个CPU处理任务,通过共享内存提高处理速度和性能。
Tightly coupled systems that communicate via shared memory. Used for speed improvement by putting together a number of off-the-shelf processors.
3. 分布式系统(Distributed Systems):
• 分布式系统通过消息传递在多个计算机间进行通信,支持资源共享,增加了系统的可靠性和速度。
- Loosely coupled systems that communicate via message passing
4. 实时系统(Real-Time Systems):
• 实时操作系统处理响应时间要求严格的任务,用于控制应用程序,其中快速响应外部刺激至关重要。
rapid response to a stimulus
3. 操作系统的核心操作
(1) 进程管理(Process management)
• 操作系统通过调度和管理进程的执行,确保计算机资源在多个进程间公平分配。
(2) 内存管理(Memory management)
• 操作系统分配、回收内存,保证程序有足够的内存空间运行,并防止内存泄漏。
(3) 文件系统管理(File system management)
• 操作系统提供文件的存储、访问、管理功能,确保文件系统的完整性与安全性。
(4) I/O系统管理(I/O system management)
• 操作系统管理输入输出设备的使用,如硬盘、键盘、显示器等,以确保数据流畅传输。
(5) 保护与安全:
• 操作系统通过权限管理和加密等方式,保护用户数据免受未经授权的访问。
二、进程管理(PROCESS MANAGEMENT)
1. 进程的定义
• 进程是程序的执行实例,它是操作系统管理的基本单元,必须按照顺序执行,操作系统负责对进程的调度和管理。
An operating system executes a variety of programs:
Time-shared system – user programs or tasks
操作系统可以执行各种不同的程序,其中 时间共享系统 是一种运行模式。在这种模式下,操作系统会将处理器的时间分配给多个用户程序或任务,从而实现多个程序或任务的并发执行。
2. 程序与进程的区别
• 程序是静态的存储在磁盘上的可执行文件,只有在加载到内存并开始执行时,才成为一个进程。
A program is a passive entity stored on disk(executable file)
a process is an active entity in execution once the program is loaded into memory.
这些图像展示了操作系统中的进程管理概念。以下是这些幻灯片中涉及的概念的详细阐述:
3. Process in Memory
1. 进程在内存中的布局 (Process in Memory)
• 程序代码 (Text): 正在执行的程序代码。
• 数据 (Data): 程序使用的全局和静态变量。
• 堆 (Heap): 在程序执行过程中动态分配的内存,用于动态分配的内存(例如C语言中的malloc)。
• 栈 (Stack): 存储临时数据,如函数参数、返回地址和局部变量。
• 内存动态分配:在运行时,堆随着需要而扩展和收缩,栈根据函数的调用和返回进行调整。
• 内存管理 (Memory Management): 操作系统负责管理内存分配,确保进程有足够的内存空间,并在不再需要时清理内存。
4. 进程状态 (Process State)
进程生命周期:随着进程的执行,它的状态发生变化。
current activity of that process
• 新建 (New): 进程正在被创建。
• 运行中 (Running): 进程正在执行指令。
• 等待中 (Waiting): 进程在等待某个事件或资源(例如等待I/O操作完成)。
• 就绪 (Ready): 进程已准备好执行,等待分配CPU(processor)。
• 已终止 (Terminated): 进程执行完成。
• 状态转换:例如,一个正在运行的进程可能在等待I/O时进入等待状态,完成后再返回就绪状态等待CPU。
5. 进程控制块 (PCB) (Process Control Block)
• 进程控制块:每个进程通过进程控制块 (PCB) 来标识,这是一个存储关于进程所有必要信息的数据结构。
❑ Each & every process is identified by its own PCB.
• PCB包含进程的状态、进程号(PID:Process identifierUnique number)、程序计数器、内存限制、CPU寄存器信息等。
PCB of each process resides in the main memory
• PCB列表:所有进程的PCB都存储在一个链表中,操作系统利用该链表(a linked list)来追踪和管理进程。
PCB在多任务环境(multiprogramming)中很重要,因为它捕获了有关同时运行的进程数量的信息。
三、 进程调度 (Process Scheduling)
• CPU调度:操作系统的进程调度程序决定哪个进程获得CPU使用权。
• CPU和I/O交替 (Alternating CPU and I/O Bursts): 进程通常在CPU密集型任务(如执行指令)和I/O密集型任务(如等待存储或网络数据)之间交替。
调度问题的基本情况:在有多个进程准备执行的情况下,操作系统需要通过调度算法,决定如何高效地分配有限的CPU资源给这些进程。
The scheduling problem:
• The system has k processes ready to run
• The system has n ≥ 1 CPUs that can run them
调度队列 (Scheduling Queues) of processes:
• 作业队列 (Job Queue): 系统中的所有进程的集合。
• 就绪队列 (Ready Queue): 所有已准备好等待执行的进程的集合。
• 设备队列 (Device Queues): 等待I/O设备的进程的集合。
根据你最近上传的6张图片,我将逐一阐述每一张图的内容。
1. Schedulers (调度程序)
不同类型的调度程序:
(1)长时间调度器 (Long-Term Scheduler) 也叫作 作业调度器 (Job Scheduler)它有助于控制进程的执行负责控制系统中处于就绪状态的进程数量;
长时间调度器的作用是决定多少进程应当被载入内存,控制 多道程序设计 (Degree of Multiprogramming)。
(2)Short-Term Scheduler(CPU scheduler)短时间调度器负责从就绪队列中选择一个进程并将其分配到CPU上;
from the ready state forscheduling it on the running state
(3)中间调度器 (Medium-Term Scheduler) 负责将进程从 主内存 (Main Memory) 移动到 次级存储器 (Secondary Memory),或反过来操作。这个过程也叫 交换 (Swapping),它有助于控制进程的执行
2. Scheduling Levels (调度层级)
它们之间通过不同的状态转换进行交互。
长时间调度负责将新建进程转入就绪状态
短时间调度决定CPU的使用,进程在运行时可能会遇到I/O请求,进入等待或阻塞状态。
新建 (New)、就绪 (Ready)、运行 (Running)、等待 (Waiting)、阻塞 (Blocked)
3. Queueing Diagram for Scheduling (调度队列图)
计算机系统中的进程如何在不同的队列中流动,并与 CPU、I/O 设备和事件发生交互。具体来说,这张图分为两个主要部分:长时间调度和短时间调度
左侧部分:长时间调度和中间调度
1. 长时间调度(Long-term scheduling):
• 这里表示在系统中有 多种进程,这些进程可以进入 “就绪队列”(Ready Queue)。长时间调度负责管理系统中有多少进程处于准备执行状态。
• 互动用户(Interactive users):用户的请求通过这个路径进入队列,准备执行。
2. 中间调度(Medium-term scheduling):
• 进程可能处于 “挂起队列”(Suspended Queue)中,等待进一步处理。
• 这里负责的是如何 挂起或恢复进程,例如,进程可能由于资源不足或等待 I/O 完成而被挂起。中间调度决定什么时候从挂起队列中恢复这些进程,或将其调度到其他队列。
3. 阻塞队列(Blocked Queue):
• 这是指那些无法继续执行的进程,因为它们正在等待某些资源(例如 I/O 操作或事件)。一旦资源或事件完成,它们会从 “阻塞队列” 进入 “准备队列” 继续执行。
右侧部分:短时间调度和 CPU 交互
1. 短时间调度(Short-term scheduling):
• 负责从 “准备队列” 中选取进程,并将其分配给 CPU 执行。这通常被称为 CPU 调度器,它根据某种策略(如时间片轮转、优先级等)选择进程。
• 时间片过期(time slice expired):如果当前进程的时间片已经用完,CPU 会将其从执行队列中移除,并将其状态更新。进程可能返回 准备队列 或 挂起队列,等待下一次调度。
• 事件等待:如果进程因等待事件(如 I/O 完成)而暂停,短时间调度会等待该事件的发生,然后将其恢复。
2. I/O 队列(I/O Queue):
• 进程可能需要 I/O 操作(例如磁盘或网络请求),它们会进入 I/O 队列。一旦 I/O 完成,进程会重新进入 准备队列 以继续执行。
3. 分配 CPU:
• 每个进程在准备状态时,会被调度器从 准备队列 中选择并分配 CPU 执行。CPU 一旦完成对该进程的执行,它可能会由于时间片到期或 I/O 操作等待而切换到其他进程。
4. 子进程执行:
• 进程可能会创建 子进程。当子进程创建时,它会被加入到 准备队列 或 I/O 队列,以便稍后处理。
5. 中断发生(Interrupt occurs):
• 系统中可能会发生中断,导致进程状态发生变化,进程需要保存当前状态,然后根据中断的优先级进行相应的处理。
4. Ready Queue and Various I/O Device Queues (就绪队列与不同的I/O设备队列):
• 中文: 这张图展示了 就绪队列(Ready Queue) 和各个 I/O 设备队列(I/O Device Queues) 的关系以及进程在这些队列之间的流动
1. 就绪队列(Ready Queue):
• 就绪队列 是一个存放所有 准备好执行 的进程的队列。图中的 头部(head) 和 尾部(tail) 用来表示进程在队列中的插入和删除操作。
• 在此队列中,进程等待 CPU 资源,等待调度器分配 CPU 执行。每个进程的控制块(PCB)会存放在该队列中,图中的 PCB7 和 PCB2 分别是两个进程的控制块(Process Control Block),它们在等待被 CPU 执行。
2. 各种 I/O 设备队列(I/O Device Queues):
这部分展示了 I/O 队列,每个 I/O 设备有一个队列,用来存放等待 I/O 操作的进程。每个设备有其独立的队列,图中的 I/O 设备 包括:
• 磁带机(mag tape)
• 磁盘(disk)
• 终端(terminal)
• disk unit 0:磁盘队列,等待磁盘设备的 I/O 操作的进程会被放在这里。图中 PCB3、PCB14、PCB6 是在等待磁盘 I/O 完成的进程。
3. 控制块(PCB):
• 每个进程的 控制块(PCB) 存储了该进程的状态信息,包括进程的状态(就绪、执行、等待等)、寄存器值、程序计数器、I/O 状态、内存信息等。
• 图中的 PCB7、PCB2、PCB3、PCB5 等 都是不同进程的控制块,它们通过队列和设备进行流动。
5. Context Switch (上下文切换)
切换的概念。当CPU从一个进程切换到另一个进程时,系统必须保存当前进程的状态,并加载新进程的状态。进程的上下文由PCB表示。
6. CPU Switch from Process to Process (CPU从一个进程切换到另一个进程)
这张图展示了CPU如何从一个进程切换到另一个进程。每次切换时,操作系统会将当前进程的状态保存到其PCB中,并从新进程的PCB中加载状态。这样确保了进程在上下文切换后能够继续执行。
左侧流程图解释:
1. 进程执行:
• 在图的最左侧,进程P0开始执行。
• 进程P0正处于运行状态。
2. 中断或系统调用:
• 进程P0在执行过程中,可能会遇到中断(interrupt)或系统调用(system call)。
• 当这种情况发生时,操作系统会介入,暂停进程P0的执行,转而执行另一个进程。
3. 保存进程状态:
• 操作系统会将进程P0的当前状态保存到**进程控制块(PCB0)**中。状态包括进程的寄存器内容、程序计数器等信息,这样可以确保进程的状态能够在之后恢复。
4. 加载下一个进程的状态:
• 操作系统会从进程控制块(PCB1)中加载进程P1的状态,使得进程P1可以继续执行。
5. 进程P1执行:
• 进程P1开始执行,并将自己所需的状态保存在PCB1中。此时进程P0被挂起,等待下次调度
右侧流程图解释:
• 这个图也展示了多个进程如何在CPU上被切换执行。每次操作系统将一个进程的状态保存到其PCB中,然后从另一个进程的PCB中恢复其状态并继续执行。
这张图展示了如何通过保存和恢复进程的状态,实现多个进程共享CPU资源,支持操作系统的并发执行。
四、Operations on Processes
操作系统对进程的管理:
System must provide mechanisms for:
• 进程创建(process creation):操作系统必须提供机制来创建进程。
• 进程终止(process termination):同样,操作系统需要能够终止进程的机制。
1. Process Creation
进程创建:
• (Parent process create children processes)父进程创建子进程,子进程也可以创建更多的进程,这样形成了进程树(tree of processes)。
(1)Resource sharing options
• 父进程和子进程共享所有资源。
• 子进程共享父进程的部分资源。
• 父子进程不共享任何资源。
(2) 执行选项
• 父进程和子进程可以并行执行。(execute concurrently)
• 父进程可以等子进程结束后再执行。
2. Process Termination
进程终止:
• 进程执行完最后一条语句后,会调用 exit() 系统调用,向操作系统请求删除该进程。
• 在终止过程中,操作系统会释放进程占用的资源并将状态返回给父进程。
(Returns status data from child to parent)
(Process’ resources are deallocated by operating system)
• 父进程可以等待子进程终止,尤其是当子进程超出了分配的资源时。
五、Inter-process Communication
进程之间的通信:
• 独立进程(INDEPENDENT PROCESSES):它们不会影响或被其他进程影响。
• 协作进程(COOPERATING PROCESSES):它们会影响或被其他进程影响。
• 协作进程允许信息共享、加速计算、模块化以及方便性(例如,在多任务环境下编写、编辑和运行相同代码的场景)。
• Information Sharing - processes which need access to the same file forexample.
• Computation speedup - a problem can be solved faster if the problem can be broken down into sub-tasks to be solved simultaneously
• Modularity - break a system down into cooperating modules. (e.g. databases with a client-server architecture.)
• Convenience - even a single user may be multi-tasking, such as editing, compiling, printing, and running the same code in different windows.
1. Communications Models
进程间通信模型:
(a) 消息传递模型 (Message Passing)
• 进程A和进程B通过内核管理的消息队列进行通信。
• 消息队列是由内核维护的,其中包含了待发送和接收的消息(例如 m0, m1, m2…mn)。
• 进程A将消息(例如 m0)发送到消息队列,进程B从消息队列中接收消息(例如 m0)。
• 这种通信模式通常适用于分布式系统中,其中不同的进程可能位于不同的计算机上。
(b) 共享内存模型 (Shared Memory)
• 进程A和进程B通过共享一块内存区域进行通信。
• 在共享内存模型中,进程A和进程B都可以直接访问这块共享内存,从而交换信息。
• 内存区域由内核管理,不同进程可以并行读写共享内存中的数据。
• 这种通信方式通常适用于同一台计算机上运行的进程,它们直接在内存中共享数据,无需通过消息队列传递信息。
(a) Message-Passing Systems
消息传递系统:
• communication是通过合作进程之间交换的消息进行的。
• A message-passing facility provides at least twooperations:
send(message)
receive(message)
• 消息的大小可以是固定的或可变的。
如果进程P和进程Q要进行通信,必须有一个通信链接(communication link)
实现链接以及send()/receive()操作的几种逻辑方法:
• 直接和间接通信 Direct and indirect communication
• 同步和异步通信 Synchronous and asynchronous communication
(1)Direct and Indirect Communication
• 通过临时队列交换消息:进程间的消息通过 temporary queue 传递,消息被缓存并待处理。
缓冲类型:BUFFERING
• 零容量 Zero capacity :队列长度为零,即消息不会被缓存,必须立即被发送或接收。
• 有限容量 Bounded capacity :队列长度有限,最多只能存储n条消息。
• 无限容量 Unbounded capacity :队列长度理论上没有上限。
(2)Direct Communication
• 进程必须显式命名对方:在直接通信中,通信的两个进程必须事先知道对方的身份并通过特定的方式进行通信。
• send(P, message) 和 receive(Q, message):发送消息和接收消息的操作需要指定具体的进程P或Q。
send (P, message) – send a message to process P
receive(Q, message) – receive a message from process Q
• 直接通信的实现方式:直接通信依赖于进程使用特定的进程标识符(process identifier)进行通信,进程标识符帮助明确通信的目标进程。
但是,提前识别发送者是困难的。
(3)Indirect Communication
• 创建一个新邮箱(端口)create a new mailbox (port):在间接通信中,进程不会直接指定目标,而是通过创建一个“邮箱”来传递消息。
• 通过邮箱发送和接收消息:消息通过一个中介(即邮箱)来交换,发送和接收的操作是通过指定邮箱进行的。
send(A, message) – send a message to mailbox A
receive(A, message) – receive a message from mailbox A
• 销毁邮箱:在消息传递完毕后,邮箱可以被销毁,不再需要占用系统资源。
Destroy a mailbox.
(4)Synchronous and Asynchronous Message Passing
Message passing may be either blocking or non-blocking
阻塞(同步)消息传递:BLOCKING is considered synchronous
• 阻塞发送 Blocking send:发送方会等待消息被接收方接受后才能继续执行。
• 阻塞接收 Blocking receive:接收方会等待消息到达之后才能继续处理。
非阻塞(异步)消息传递:NON-BLOCKING is considered asynchronous
• 非阻塞发送 Non-blocking send:发送方不会等待,直接继续执行其他任务。
• 非阻塞接收 Non-blocking receive:接收方可以继续执行,如果没有消息,接收的是一个“空”消息。
A valid message, orNull message
(b) Shared-Memory Systems
• 共享内存:进程通过共享内存来交换信息,所有参与的进程都可以读写共享区域的数据。
• 通过共享内存交换信息:通过读写共享区域的数据,进程能够交换信息。
缓冲区类型:buffers
• 无限缓冲区 Unbounded-buffer :没有容量限制,理论上可以存放任意数量的数据。
• 有限缓冲区 Bounded-buffer :假设缓冲区大小是固定的,不能超过一定的容量。
1.Preprocessor Directive(预处理指令)
• #include <stdio.h>:
这是一个 预处理指令,在编译前由预处理器处理。它告诉编译器在编译时包含标准输入输出库 stdio.h。这个库提供了与输入输出相关的函数,如 printf、scanf 等。
2. Main Function(主函数)
• int main():
这是 主函数,C 语言程序的入口点。当程序运行时,操作系统会调用 main() 函数开始执行程序。返回类型是 int,意味着它返回一个整数值,通常用于返回执行状态码给操作系统。
Variable names: use letters, numbers, _ , start with letter, case sensitive, do not use reserved words(for, int, return)
在 scanf("%c%c", &letter1, &letter2); 中,%c 用来读取单个字符。问题在于,scanf 读取字符时并不会跳过空格(或者换行符等空白字符)。
• 如果你输入 a b(注意 a 和 b 之间有一个空格),那么程序会先把 a 存储到 letter1 中,然后把空格(' ')存储到 letter2 中。
与 %c 不同,其他格式说明符(如 %d、%lf 等)会自动跳过任何空白字符(空格、换行符、制表符等),直到它们能够读取到一个有效的数值为止。
Use format specifier %lf
Default 6 digits after point, if want 2 digits, use %.2lf
在 scanf 中,%f 和 %lf 都是用来读取 float 或 double 类型的数值。但是在 printf 中,%f 和 %lf 是等价的,都是用来输出 double 类型的。
%.2lf 会对 double 类型的数值进行四舍五入,保留小数点后 2 位。例如,如果你输入 3.14159,程序会输出 3.14
• %lf 只是告诉 scanf 你希望读取的是 double 类型的浮点数,它不会限制输入的小数位数。
#include <stdio.h>
int main() {
printf("5/2 equals %d\n", 5/2); // 整数除法
printf("5.0/2.0 equals %lf\n", 5.0/2.0); // 浮点数除法
printf("5/2.0 equals %lf\n", 5/2.0); // 整数除以浮点数
printf("5.0/2 equals %lf\n", 5.0/2); // 浮点数除以整数
return 0;
}
• 整数除法 (5/2) 会截断小数部分,结果是 2。
• 浮点数除法 (5.0/2.0, 5/2.0, 5.0/2) 会进行浮点数计算,结果会保留小数部分,输出为 2.500000(%lf 默认显示6位小数)。
• 在混合整数和浮点数时,整数会被转换为浮点数,然后进行浮点数运算。
格式说明符,取模操作符(%)
1. dec1 = (double) num1; 会将整数 num1 转换为 double 类型(这只是精度扩展,不会改变数值)。
2. num2 = (int) dec2; 会将浮点数 dec2 转换为整数,并丢弃小数部分。