28k25 分钟

# 信号基础 # 中断 中断是计算机系统中硬件和操作系统之间进行通信的一种基础机制,它使得系统能够响应紧急事件或需要立即处理的情况。中断分为两大类: 硬件中断:由硬件设备触发,例如键盘、鼠标、磁盘驱动器等。当这些设备需要 CPU 注意时,它们会发送一个信号给 CPU,请求进行某些操作,如数据传输或状态变更。 软件中断:由软件程序触发,通常是通过执行特定的中断指令来实现。软件中断用于实现系统调用,允许用户态程序请求操作系统提供的服务。 中断机制允许硬件设备或软件程序在需要时通知 CPU,从而确保了系统能够及时响应外部事件或程序请求。CPU 接收到中断信号后,会保存当前状态,转而执行相应的中断
17k16 分钟

# 管道 进程间通信(IPC)是多任务操作系统中的关键功能,允许进程之间交换信息。一种自然的 IPC 方式是利用文件系统作为中介: 基于文件的通信:在这种方式中,一个进程通过打开并读写文件来存储信息,而另一个进程则打开同一个文件来读取这些信息。尽管这种方法简单直观,但它依赖于磁盘 I/O 操作,这可能导致较低的通信效率。 为了提高通信效率,操作系统提供了一种特殊的文件系统对象,即 命名管道(Named Pipe,FIFO): 命名管道:这是一种特殊的文件,存在于文件系统中,但它允许进程通过内核维护的缓冲区直接交换数据,而不是通过磁盘。这种方式减少了磁盘 I/O 操作,从而提
38k34 分钟

# 进程控制 # 孤儿进程 在操作系统中,如果父进程在子进程退出之前终止,子进程的状态会发生变化,成为所谓的 “孤儿进程”。在这种情况下,操作系统会将孤儿进程自动分配给 PID 为 1 的特殊进程,即 init 进程,作为其新的父进程。 孤儿进程的处理: 收养机制:操作系统确保所有孤儿进程都有一个父进程。当父进程退出时,操作系统会介入,将孤儿进程的父进程设置为 init 进程(PID 为 1)。 资源清理:当孤儿进程退出时,它的资源清理工作将由其新的父进程 ——init 进程来完成。这确保了系统资源得到适当的释放和回收。 init 进程的角色:init 进程:在类 UNIX 系统中,ini
12k11 分钟

# 进程 # 操作系统的背景 批处理系统: 操作系统的最初原型是批处理系统,这种系统允许操作员将所有任务集中起来,由系统自动读取并执行。当一个任务完成后,系统会自动执行下一个任务。然而,批处理系统的主要问题是在任务执行过程中经常需要等待 IO 操作,导致 CPU 频繁空闲。 多道程序设计: 为了解决 CPU 空闲的问题,引入了多道程序设计技术。在这种设计中,内存被划分为多个区域,每个区域存储一个任务的指令和数据。这样,当一个任务等待 IO 操作时,另一个任务可以使用 CPU,从而提高 CPU 的利用率。 分时系统: 除了提高 CPU 利用率,程序员还希望计算机能够快速响应他们的操作。这种需求催
9.4k9 分钟

# 管道 # 通信的方式 在通信系统中,根据数据传输的方向和方式,通信可以被分为单工、双工和半双工三种模式。 通信方式 描述 单工通信 永远只能由一方向另一方发送数据 半双工通信 双方都可以收发数据,但是在同一时刻只能一端发另一端收 全双工通信 两端可以同时收发数据 # 命名管道 Linux 中的命名管道(named pipe)是一种特殊类型的文件,又称为 FIFO。它为进程提供一个独立于文件的实际 I/O 来源和目的地。在 Linux 系统中它是一种重要的进程间通信(IPC)的机制。 管道虽然看起来像是磁盘上的文件,但实际上是一个数据流或缓冲区,与匿名管
19k18 分钟

# 无缓冲文件流 带用户态缓冲区的文件流: 这类文件流属于语言的库函数,是对系统调用的封装。 它们使用用户态缓冲区来减少系统调用的次数,提高 I/O 操作的效率。 用户程序通过缓冲区与文件进行交互,而不需要直接进行系统调用。 用户态缓冲区的作用: 用户态缓冲区作为数据传输的中间层,由语言的标准库管理。 它的存在简化了用户程序的 I/O 操作,因为用户程序不需要关心缓冲区的内部管理。 无缓冲的文件 I/O: 在某些情况下,应用程序可能需要直接与内核进行数据交互,而不是通过用户态缓冲区。 无缓冲的 I/O 通常使用系统调用直接进行,这种 I&#x
25k23 分钟

# 文件系统编程概述 # 三种类型的函数对比 ISO C 标准库函数: 这些函数是由 ISO(国际标准化组织)提供的,具有最好的通用性和跨平台性。在所有遵循 ISO 标准的现代 C 编译平台上,这些函数的行为都是一致的。 这些函数提供了一些通用的功能实现,例如: printf 、 scanf 、 fopen 、 malloc 等。 它们在 man 手册的第 3 部分(3 号手册)中有所描述。 POSIX 标准库函数: POSIX-C 标准旨在为不同的类 Unix 操作系统提供一致的编程接口,以实现应用程序的跨平台移植。 这些函数同样是库函数,也在 man 手册的第 3
14k12 分钟

# Linux 系统层次结构 # 内核交互 内核交互的定义: 内核交互是指用户空间程序请求操作系统内核执行某些操作的过程。由于内核控制着计算机的所有硬件资源,因此任何需要访问或控制这些资源的操作都需要通过内核来完成。 内核的作用: 内核负责管理计算机的硬件资源,包括但不限于: CPU 调度 内存管理 外部设备(如键盘、鼠标、显示器等) 进程和线程的创建、调度和管理 网络通信 何时需要与内核交互: 当程序需要执行以下操作时,通常需要与内核交互: 文件系统访问和管理 外部设备的输入 / 输出操作 动态内存分配(如使用 malloc 或 free ) 进程间通信或网络通信
18k16 分钟

# C 语言标准 ISO C 标准(International Standardization Organization C)是一套确保 C 语言函数在不同平台上具有一致行为的标准。这些标准定义了语言的语法、库函数以及它们的行为,从而为开发者提供了跨平台开发的便利。 例如,一些常见的 C 语言函数如 printf 、 scanf 、 malloc 和 fopen 等,都遵循 ISO C 标准,这意味着在兼容 ISO C 标准的编译平台上,它们的行为是一致的。 POSIX 标准(Portable Operating System Interface)是一套更为广泛的标准,它不仅包括语言规
36k33 分钟

# 输入输出流 # 文件打开方式 在处理文件操作时,我们可以通过指定不同的模式来打开文件,主要的模式有: 'r' 只读模式:此模式下,文件将被打开用于读取,不允许写入或修改文件内容。 'w' 只写模式:此模式下,文件将被打开用于写入。如果文件已存在,其内容将被截断,即原有内容将被删除。 'a' 附加模式:此模式下,文件将被打开用于追加数据到文件末尾。如果文件不存在,将创建新文件。 这些模式可以与以下选项结合使用: 't' 文本模式:指示以文本文件形式打开文件。在文本模式下,系统会自动处理换行符,根据不同操作系统的规则转换为相