![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux相关
文章平均质量分 60
与Linux有关的阅读笔记、源码解析等。
Jacob0707
这个作者很懒,什么都没留下…
展开
-
APUE第三版源码使用
1. 找不到major minor 解决方法:在devrdev.c文件中#include <sys/sysmacros.h> 2. #define _flag __pad[4]报错 解决方法:将下面的代码修改成: 3./usr/bin/ld: cannot find -lbsd 解决方法:在Linux上:apt-get install libbsd-dev ...原创 2021-08-19 23:08:03 · 251 阅读 · 0 评论 -
《Linux内核设计与实现》笔记(十五)
(十五)进程地址空间 内核除了管理本身的内存外,还必须管理用户空间中进程的内存。我们称这个内存为进程地址空间,也就是系统中每个用户空间进程所看到的内存。 Linux 操作系统采用虚拟内存技术,因此,系统中的所有进程之间以虚拟方式共享内存。对一个进程而言,它好像都可以访问整个系统的所有物理内存。更重要的是,即使单独一个进程,它拥有的地址空间也可以远远大于系统物理内存。 地址空间 进程地址空间由进程可寻址的虚拟内存组成,而且更为重要的特点是内核允许进程使用这种虚拟内存中的地址。每个进程都有一个32位或64位的平原创 2021-06-08 10:48:54 · 45 阅读 · 0 评论 -
《Linux内核设计与实现》笔记(十四)
(十四)块IO层 系统中能够随机访问固定大小数据片的硬件设备称作块设备,这些固定大小的数据片就称作块。最常见的块设备是硬盘,除此以外,还有软盘驱动器、蓝光光驱和闪存等许多其他块设备。它们都是以安装文件系统的方式使用的——这也是块设备一般的访问方式。 块设备 块是文件系统的一种抽象——只能基于块来访问文件系统。 内核要求块大小是2的整数倍,而且不能超过一个页的长度。 缓冲区和缓冲区头 当一个块被调入内存时,它要存储在一个缓冲区中。每个缓冲区与一个块对应,它相当于是磁盘块在内存中的表示。 每一个缓冲区都有一个对原创 2021-06-07 22:01:50 · 63 阅读 · 0 评论 -
《Linux内核设计与实现》笔记(十三)
(十三)虚拟文件系统 虚拟文件系统作为内核子系统,为用户空间程序提供了文件和文件系统相关的接口。系统中所有文件系统不但依赖VFS共存,而且也依靠VFS系统协同工作。通过虚拟文件系统,程序可以利用标准的Unix系统调用对不同的文件系统,甚至不同介质上的文件系统进行读写操作。 通用文件系统接口 VFS使得用户可以直接使用open()、read()和write()这样的系统调用而无须考虑具体文件系统和实际物理介质。 它把各种不同的文件系统抽象后采用统一的方式进行操作。 文件系统抽象层 之所以可以使用这种通用接口对原创 2021-06-07 10:30:08 · 90 阅读 · 0 评论 -
《Linux内核设计与实现》笔记(十二)
(十二)内存管理 内核本身不能像用户空间那样奢侈地使用内存。内核与用户空间不同,它不具备这种能力,它不支持简单便捷地内存分配方式。 页 内核把物理页作为内存管理的基本单位。尽管处理器的最小可寻址单位通常为字,但是,内存管理单元通常以页为单位进行处理。 内核用struct page结构表示系统中的每个物理页,page结构与物理页相关,而并非与虚拟页相关。因此,该结构对页的描述只是短暂的。即使页中所包含的数据继续存在,由于交换等原因,它们也可能并不再和同一个page结构相关联。内核仅仅用这个数据结构来描述当前时原创 2021-06-06 12:11:14 · 161 阅读 · 0 评论 -
《Linux内核设计与实现》笔记(十一)
(十一)定时器和时间管理 系统定时器和时钟中断处理程序是Linux系统内核管理机制中的中枢。 内核中的时间概念 内核必须在硬件的帮助下才能计算和管理时间。 系统定时器以某种频率自行触发时钟中断,该频率可以通过编程预定,称作节拍率,当时钟中断发生时,内核就通过一种特殊的中断处理程序对其进行处理。 因为预编的节拍率对内核来说是可知的,所以内核知道连续两次时钟中断的间隔时间。内核就是靠这种已知的时钟中断间隔来计算墙上时间(实际时间)和系统运行时间的。 内核通过控制时钟中断维护实际时间。 节拍率:HZ 系统定时器频原创 2021-06-05 10:41:01 · 68 阅读 · 0 评论 -
《Linux私房菜》笔记(0)
0 计算机概论 计算机是由几个单元所组成的,包括输入单元、输出单元、CPU内部的控制单元、算术逻辑单元与内存五大部分。 CPU的种类 目前世界上常见到的两种主要CPU种类,分别是精简指令集(RISC)与复杂指令集(CISC)系统。 精简指令集(RISC): 这种CPU的设计中,微指令集较为精简,每个指令的执行时间都很短,完成的操作也很单纯,指令的执行性能较佳;但是若要做复杂的事情就要由多个指令来完成。常见的RISC微指令集CPU主要有Sun公司的SPARC系列、IBM公司的Power Architectur原创 2021-06-04 17:26:45 · 53 阅读 · 0 评论 -
《Linux内核设计与实现》笔记(十)
(十)内核同步方法 原子操作 原子操作可以保证指令以原子的方式执行——执行过程不被打断。 内核提供了两组原子操作接口——一组针对整数进行操作,另一组针对单独的位进行操作。 针对整数的原子操作只能对atomic_t类型的数据进行处理。首先,让原子函数只接收atomic_t类型的操作数,可以确保原子操作只与这种特殊类型数据一起使用。同时,这也保证了该类型的数据不会被传递给任何非原子函数。 原子整数操作最常见的用途就是实现计数器。使用复杂的锁机制来保护一个单纯的计数器显然杀鸡用了宰牛刀,所以,开发者最好使用ato原创 2021-06-03 11:24:04 · 68 阅读 · 0 评论 -
《Linux内核设计与实现》笔记(九)
(九)内核同步介绍 共享资源要防止并发访问,因为如果多个执行线程同时访问和操作数据,就有可能发生各线程之间相互覆盖共享数据的情况,造成被访问数据处于不一致状态。 临界区和竞争条件 所谓临界区(也称为临界段),是指访问和操作共享数据的代码段。为了避免在临界区中并发访问,必须保证这些代码原子地执行,即操作在执行结束前不可被打断,就如同整个临界区是一个不可分割的指令一样。 如果两个执行线程有可能处于同一个临界区中同时执行,那么这就是程序包含的一个bug,我们称它是竞争条件(这里会存在线程竞争)。 避免并发和防止竞原创 2021-06-01 14:57:22 · 64 阅读 · 0 评论 -
《Linux内核设计与实现》笔记(八)
(八)下半部和推后执行的工作 整个中断处理流程被分为两个部分,第一个部分是中断处理程序(上半部),第二个部分叫做下半部。 下半部 下半部的任务就是执行与中断处理密切相关但中断处理程序本身不执行的工作。在理想情况下,最好是中断处理程序将所有工作都交给下半部分执行,因为我们希望在中断处理程序中完成的工作越少越好,能够尽快地返回。 什么任务应该在哪个部分中完成————如何做决定完全取决于驱动程序开发者自己的判断。可借鉴的点: 如果一个任务对时间非常敏感,将其放在中断处理程序中执行; 如果一个任务和硬件相关,将其放原创 2021-06-01 11:11:42 · 52 阅读 · 0 评论 -
《Linux内核设计与实现》笔记(七)
(七)中断和中断处理 由我们来提供一种机制,让硬件在需要的时候向内核发出信号,这就是中断机制。 中断 中断本质上是一种特殊的电信号,由硬件设备发向处理器。处理器接收到中断后,会马上向操作系统反映此信号的到来,然后就由操作系统负责处理这些新到来的数据。 中断控制器是个简单的电子芯片,其作用是将多路中断管线采用复用技术只通过一个和处理器相连接的管线与处理器通信。当接收到一个中断后,中断控制器会给处理器发送一个电信号,处理器一经检测到此信号,便中断自己的当前工作转而处理中断。此后,处理器会通知操作系统已经产生中断原创 2021-05-31 20:24:07 · 70 阅读 · 0 评论 -
《Linux内核设计与实现》笔记(五)
(五)系统调用 接口 在现代操作系统中,内核提供了用户进程与内核进行交互的一组接口。这些接口让应用程序受限地访问硬件设备,提供了创建新进程并与已有进程进行通信的机制,也提供了申请操作系统其他资源的能力。应用程序发出各种请求,而内核负责满足这些请求,实际上提供这些接口主要是为了保证系统稳定可靠,避免应用程序恣意妄行。 与内核通信 系统调用可以避免应用程序不正确地使用硬件设备,窃取其他进程的资源,或做出其他危害系统的事情。在Linux中,系统调用是用户空间访问内核的唯一手段;除异常和陷入外,它们是内核唯一的合法原创 2021-05-29 11:13:58 · 65 阅读 · 0 评论 -
《Linux内核设计与实现》笔记(四)
(四)进程调度 1. Linux调度的概念 进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统。 Linux提供了抢占式的多任务模式。 进程可以被分为I/O消耗型和处理器消耗型。I/O消耗型通常都是运行短短的一会儿,因为它在等待更多的I/O请求时最后总会阻塞;处理器耗费型进程把时间大多用在执行代码上,调度策略往往是尽量降低它们的调度频率。 调度策略通常要在两个矛盾的目标中间寻找平衡:进程响应迅速和最大系统利用率。Linux更倾向于优先调度I/O消耗型进程。 时间片是一个数值,它表明进程原创 2021-05-28 22:20:06 · 65 阅读 · 0 评论 -
《Linux内核设计与实现》笔记(三)
(三)进程管理 内核调度的对象是线程,而不是进程;对Linux而言,线程只不过是一种特殊的进程罢了。 在现代操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存,让进程觉得自己在独享处理器和内存资源。有趣的是,在线程之间可以共享虚拟内存,但每个都拥有各自的虚拟处理器。 程序本身并不是进程,进程是处于执行期的程序以及相关的资源的总称。 内核把进程的列表存放在叫做任务队列的双向循环链表中,链表中的每一项都是类型为task_struct、称为进程描述符的结构,包含一个具体进程的所有信息。 进程描述符中包含的数原创 2021-05-28 11:55:50 · 55 阅读 · 0 评论 -
《Linux内核设计与实现》笔记(二)
从内核出发 内核开发与用户空间内应用程序的开发的主要差异:内核编程时既不能访问C库也不能访问标准的C头文件;内核编程时必须使用GNU C;内核编程时缺乏像用户空间那样的内存保护机制;内核编程时难以执行浮点运算;内核给每个进程只有一个很小的定长堆栈;由于内核支持异步中断、抢占和SMP,因此必须时刻注意同步和并发;要考虑可移植性的重要性。 内核开发者通常把那些对时间要求比较高,而本身长度又比较短的函数定义成内联函数。 Linux的内核混合使用了C语言和汇编语言。在偏近体系结构的底层或对执行时间要求严格的地方,原创 2021-05-28 11:54:11 · 61 阅读 · 0 评论 -
《Linux内核设计与实现》笔记(一)
(一)Linux内核简介 一个内核由负责响应中断的中断服务程序,负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址空间的内存管理程序和网络、进程间通信等系统服务器程序共同组成。 在系统中运行的应用程序通过系统调用来与内核通信,让内核代其完成各种不同任务。 当硬件设备想和系统通信的时候,它首先要发出一个异步的中断信号去打断处理器的执行,继而打断内核的执行。 许多操作系统的中断服务程序,包括Linux的,都不在进程上下文中执行。它们在一个与所有进程都无关的、专门的中断上下文中运行。 可以将每个处理原创 2021-05-28 11:51:10 · 82 阅读 · 0 评论