Linux系统编程
文章平均质量分 97
_宁清
Off To A Great Start
展开
-
【Linux】线程封装 | 线程互斥 | 基于阻塞队列的生产消费者模型
代码必须要有互斥行为:当代码进入临界区执行时,不允许其他线程进入该临界区。如果多个线程同时要求执行临界区的代码,并且临界区没有线程在执行,那么只能允许一个线程进入该临界区。如果线程不在临界区中执行,那么该线程不能阻止其他线程进入临界区。做到以上这三点,本质上就是给临界区加一把锁。Linux上提供的这把锁叫互斥量。原创 2024-03-19 16:02:14 · 858 阅读 · 3 评论 -
【Linux】多线程概念 | POSIX线程库
线程是比进程更加轻量化的一种执行流,线程是在进程内部执行的一种执行流,线程是CPU调度的基本单位,而进程是承担系统资源的基本实体。换言之,当我们创建进程时是创建一个task_struct、创建地址空间、维护页表,然后在物理内存当中开辟空间、构建映射,打开进程默认打开的相关文件、注册信号对应的处理方案等等。在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”。一切进程至少都有一个执行线程。原创 2024-03-19 15:37:18 · 955 阅读 · 0 评论 -
【Linux】进程信号的保存 | 自定义捕捉
不是所有信号的处理都是立即进行的,而是在合适的时候处理,“合适的时候”是指进程从内核态返回到用户态的时候。有些信号,例如 SIGKILL,会立即终止进程。但对于其他信号,处理可能会延迟,具体取决于进程的状态以及是否被阻塞。原创 2024-02-17 19:01:29 · 1129 阅读 · 0 评论 -
【Linux】进程信号概念 | 核心转储 | 信号的产生
产生信号的方式可以有很多(譬如:由操作系统、其他进程,或者进程自身产生),但是向目标进程发送信号只能由操作系统发送,因为操作系统是进程的管理者,发送信号的本质是修改PCB中的信号位图。原创 2024-02-13 15:50:15 · 1255 阅读 · 4 评论 -
【Linux】文件的软硬链接
软链接:也称为符号链接,类似于 Windows 快捷方式,可以跨文件系统。硬链接:指向相同 inode 的文件副本,不能跨文件系统。原创 2024-02-08 10:06:02 · 1130 阅读 · 1 评论 -
【Linux】EXT2文件系统 | 磁盘分区&块组 | inode
我们已经学习了在内存中被打开(被加载)的文件,还有一部分是磁盘中未被打开的文件。这篇我们来谈磁盘文件。文件系统这个名词狭义上指的是磁盘文件系统,例如Linux下的ext2文件系统。原创 2024-02-04 23:26:46 · 1243 阅读 · 0 评论 -
【Linux】System V 共享内存
"System V 共享内存" 是一种在类Unix操作系统中实现的共享内存机制,得名于AT&T的UNIX System V操作系统,其中引入了这种共享内存的概念。System V共享内存是System V IPC(Inter-Process Communication,进程间通信)机制的一部分,与其他System V IPC机制,如消息队列和信号量一起,提供了进程间通信的方式。原创 2024-01-30 13:33:43 · 1183 阅读 · 0 评论 -
【Linux】命名管道
匿名管道与命名管道的区别- 匿名管道由`pipe`函数创建并打开。- 命名管道由`mkfifo`函数创建,打开用`open`- FIFO(命名管道)与 pipe(匿名管道)之间唯一的区别在它们创建与打开的方式不同,一但这些工作完成之后,它们具有相同的语义。原创 2024-01-28 13:38:39 · 1131 阅读 · 0 评论 -
【Linux】进程间通信概念 | 匿名管道
进程间通信简称IPC(Interprocess communication),是操作系统中的一个重要概念,它允许不同的进程在执行过程中交换数据、共享资源、协调行为等。在多道程序设计环境下,多个进程可能需要相互通信以完成复杂的任务,而进程间通信提供了各种机制来实现这种交互。管道是Unix中最古老的进程间通信的形式。我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”。原创 2024-01-27 23:20:25 · 1384 阅读 · 0 评论 -
【Linux】文件描述符 | 重定向 | C文件指针与fd的关系 | 用户级缓冲区
当进程用open()系统调用打开文件时,我们需要先将该文件从磁盘当中加载到内存,形成对应的struct file,将该struct file连入文件双链表,并将该结构体的首地址填入fd_array数组当中下标为3的位置,使得fd_array数组中下标为3的指针指向该struct file,最后open()返回该文件的文件描述符给调用进程即可。在Linux系统中,"一切皆文件"是一个核心概念,意味着系统中的各种资源,包括设备、套接字、管道等,都被抽象为文件,并通过文件描述符进行访问。原创 2024-01-26 15:51:54 · 1784 阅读 · 6 评论 -
【Linux】从C语言文件操作 到Linux文件IO | 文件系统调用
一个进程可以打开很多文件,所以操作系统运行时被打开的文件是很多的,操作系统当然要对这些被打开的文件做管理,管理的方式是:先描述,再组织。因此,一个文件要被打开,一定要先在内核中,形成被打开的文件对象。本文研究的文件操作的本质是:进程和内存中被打开(被加载)的文件的关系。原创 2024-01-26 15:30:44 · 1232 阅读 · 0 评论 -
【Linux】进程地址空间
OS 为每个进程都创建独立的地址空间就相当于给每个进程都画了一张一样的"大饼",即告诉每个进程:“你享有计算机中的所有资源,整个系统内存都是你的,你快来用吧!其实就是操作系统在页表中该数据的权限属性上放置的是’r’,当你要对该数据进行修改时(写入)时,首先需要进行虚拟地址与物理地址的转化,转化的过程中操作系统发现权限为只读,所以才不可修改不可写入。将虚拟地址空间与物理内存一一对应 (映射),我们用户只能得到虚拟地址空间中的虚拟地址,当我们修改虚拟地址中的数据时,操作系统会先。,然后修改物理内存中的数据。原创 2024-01-19 15:39:42 · 1168 阅读 · 0 评论 -
【Linux】进程控制
由于 exit 是C语言库函数,而 _exit 是系统调用,所以可以肯定的是 exit 的底层调用 _exit 函数,exit 是 _exit 的封装;其次,由于计算机体系结构的限制,CPU之和内存交互,所以数据会先被写入到缓冲区,待缓冲区刷新时才被打印到显示器上;而在上面的程序中,我们没用使用 ‘\n’ 进行行缓冲的刷新,可以看到,exit 最后打印了 “hello linux”,而 _exit 什么都没有打印;原创 2024-01-18 12:04:30 · 1152 阅读 · 1 评论 -
【Linux】进程的概念 进程状态 进程优先级
进程就是被加载到内存中的程序,或者被运行起来的程序就叫做进程。操作系统内核观点:进程=可执行程序+进程控制块(PCB)。优先级和权限不同,权限决定的是一件事情能不能做;优先级是在权限允许的前提下,该事情先做还是后做;原创 2024-01-17 22:39:14 · 1857 阅读 · 5 评论