添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

就绪 (Ready):进程在就绪队列中等待被调度。此时,进程已具备运行所需的全部资源,只是等待CPU的分配。一旦调度器决定将CPU时间分配给该进程,进程就会从就绪状态转变为运行状态。

运行 (Running):进程获得CPU时间片并实际运行。这是进程执行其指令的阶段。一个进程在运行状态下会:

正常执行完其时间片后,被调度器暂停,返回到就绪状态;

发出I/O请求或其他阻塞操作,进入阻塞状态;

被操作系统强制终止,进入终止状态。

阻塞 (Waiting):进程在等待某个事件(如I/O操作完成、资源可用等)时进入阻塞状态。在阻塞状态下,进程不占用CPU时间。等待事件发生后,进程会从阻塞状态转回就绪状态,等待再次被调度。

终止 (Termination):进程完成其任务或被操作系统强制终止后进入终止状态。在这个阶段,操作系统会释放进程占用的资源,并删除进程的PCB。进程终止后,不再存在于系统中。

1. 输入操作

输入操作指的是将外部数据输入到计算机系统中。常见的输入设备包括键盘、鼠标、扫描仪、麦克风等。例如,在键盘上输入文字时,这些文字被传输到计算机中,这就是一次输入操作。

2. 输出操作

输出操作指的是将计算机中的数据输出到外部设备。常见的输出设备包括显示器、打印机、扬声器等。例如,在屏幕上看到显示的图像或文字时,这就是一次输出操作。

5.2 I/O设备的种类 1. 块设备(Block Devices)

块设备可以一次读取或写入固定大小的数据块。硬盘、光盘和闪存都是典型的块设备。这些设备通常用于存储大量数据,并允许随机访问。

2. 字符设备(Character Devices)

字符设备一次处理一个字符或字节的数据。键盘、鼠标和串行端口都是字符设备。这些设备通常用于处理较小的数据流,并允许顺序访问。

5.3 I/O操作的实现方式 1. 同步I/O

在同步I/O操作中,I/O操作需要等待数据传输完成,才能继续进行后续的处理。这意味着在I/O操作完成之前,CPU会一直处于等待状态。这种方式可能会导致CPU资源的浪费,因为CPU在等待过程中无法执行其他任务。

2. 异步I/O

在异步I/O操作中,I/O操作在后台进行,CPU可以继续执行其他任务而不必等待数据传输完成。异步I/O可以提高系统的效率和响应速度,因为它允许并行处理多个任务。

3. 中断驱动I/O

中断驱动I/O是通过硬件中断来实现的。当I/O设备准备好数据时,会发送一个中断信号给CPU,通知CPU进行处理。这样,CPU可以在等待I/O操作的同时处理其他任务,而不会浪费时间。

4. 直接内存访问(DMA)

DMA是一种特殊的I/O技术,它允许I/O设备直接与内存进行数据交换,而无需经过CPU。这可以大大提高数据传输的效率,因为数据不需要通过CPU的控制。

5.4 I/O操作的示例

打开一个文件并读取或写入数据时,就是在进行I/O操作。比如在C语言中,使用 fopen 打开文件,使用 fread fwrite 进行数据读写。

FILE *file = fopen("example.txt", "r");
char buffer[100];
fread(buffer, sizeof(char), 100, file);
fclose(file);

网络通信也是一种常见的I/O操作。比如在网络编程中,使用 sendrecv 函数发送和接收数据包。

int sock = socket(AF_INET, SOCK_STREAM, 0);
connect(sock, (struct sockaddr*)&server_addr, sizeof(server_addr));
send(sock, "Hello", 5, 0);
recv(sock, buffer, 100, 0);
close(sock);