七葉の喫茶ステラ
✨

七葉の喫茶ステラ

=技术与美日新月异=

Linux 信号

Linux 信号

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

Linux 进程间通信

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

Linux 进程(下)

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

Linux 进程(上)

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

Linux 管道和 IO 多路复用

管道 通信的方式 在通信系统中,根据数据传输的方向和方式,通信可以被分为单工、双工和半双工三种模式。 命名管道 Linux 中的命名管道(named pipe)是一种特殊类型的文件, 又称为 FIFO。它为进程提供一个独立于文件的实际 I/O 来源和目的地。在 Linux 系统中它是一种重要的进程间通信(IPC)的机制。 管道虽然看起来像是磁盘上的文件,但实际上是一个数据流或缓冲区,与匿名管道相比,命名管道有自己的存在形式,而匿名管道则不存在于文件系统中。命名管道不会长期占用磁盘空间存储数据,它仅作为一个通信接口,允许读写操作以文件系统操作的方式进行。 命名管道创建后, 可以用于两个进程之间通
more...
Linux 文件流

Linux 文件流

无缓冲文件流 带用户态缓冲区的文件流: 这类文件流属于语言的库函数,是对系统调用的封装。 它们使用用户态缓冲区来减少系统调用的次数,提高 I/O 操作的效率。 用户程序通过缓冲区与文件进行交互,而不需要直接进行系统调用。 用户态缓冲区的作用: 用户态缓冲区作为数据传输的中间层,由语言的标准库管理。 它的存在简化了用户程序的 I/O 操作,因为用户程序不需要关心缓冲区的内部管理。 无缓冲的文件 I/O: 在某些情况下,应用程序可能需要直接与内核进行数据交互,而不是通过用户态缓冲区。 无缓冲的 I/O 通常使用系统调用直接进行,这种 I/O 操作方式可以提供更直接的控制,但可能牺牲一些性能。 在传
more...
Linux 目录流

Linux 目录流

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

Linux 杂项

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

Linux C 基础

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

C 语言文件流

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