随笔分类 -  linux

摘要:概述 本章主要描述boot/目录中的三个汇编代码文件,见列表6-1所示。正如在前一章中提到的,这三个文件虽然都是汇编程序,但却使用了两种语法格式。bootsect.s和setup.s是实模式下运行的16位代码程序,采用近似于Intel的汇编语言语法并且需要使用Intel 8086汇编编译器和连接器a 阅读全文
posted @ 2024-09-16 20:47 不会笑的孩子 阅读(669) 评论(0) 推荐(0)
摘要:PKG_CONFIG_PATH 作用: 用于告.pc 文件 用途: 当你在编pkg-config 工具来查找该库的信息。PKG_CONFIG_PATH 指定了 pkg-config 工具在哪里查找这些信息。 export PKG_CONFIG_PATH=/path/to/pkgconfig/file 阅读全文
posted @ 2023-11-28 19:33 不会笑的孩子 阅读(102) 评论(0) 推荐(0)
摘要:宏内核(Monolithic Kernel) 单一内核,宏内核将大多数操作系统功能集成在一个单一的内核中。 性能:由于所有的功能都在内核空间运行,所以宏内核通常具有较高的性能,因为它可以直接访问内核数据结构和函数 复杂性:宏内核的复杂性较高,容易导致内核变的庞大和难以维护。 Linux、Harmon 阅读全文
posted @ 2023-10-08 23:01 不会笑的孩子 阅读(340) 评论(0) 推荐(0)
摘要:_divide_error 这是一个标记,通常用于表示与除法错误相关的处理程序或函数。当发生除以零的错误时,处理器可能会跳转到与此标记关联的处理程序,以处理该错误。 _debug _debug:这是一个标记,通常用于表示与调试相关的处理程序或函数。调试处理程序通常用于在调试模式下捕获和处理调试事件 阅读全文
posted @ 2023-10-07 21:42 不会笑的孩子 阅读(168) 评论(0) 推荐(1)
摘要:Linux中实现链表 //定义链表节点结构体 struct Node{ int data;//数据区 struct Node* next;//指向下一个地址域 }; //初始化链表为空格 struct Node* head = NULL; //插入元素到链表的末尾 void insert(int d 阅读全文
posted @ 2023-09-28 20:26 不会笑的孩子 阅读(61) 评论(0) 推荐(0)
摘要:调度器 进程调度器是操作系统内核中的一个重要组件,负责管理和分配CPU时间给不同的进程。其主要任务是决定哪个进程应该在CPU上运行,并在多任务操作系统中确保公平性、高效性和响应性。 调度策略:进程调度器通常使用一种调度策略来选择下一个运行的进程。最常见的调度策略是时间片轮转(Round Robin) 阅读全文
posted @ 2023-09-27 22:02 不会笑的孩子 阅读(380) 评论(0) 推荐(0)
摘要:fork fork系统调用的实现在kernel/fork.c文件中。最主要函数do_fork fork是最常见的创建子进程的方法。它创建一个新的子进程,子进程是父进程的复制品,包括所有的内存、文件描述符等。子进程在父进程开始执行,但它们是独立的进程、互不影响。 fork是一种相对重量级的操作,因为它 阅读全文
posted @ 2023-09-27 09:16 不会笑的孩子 阅读(118) 评论(0) 推荐(0)
摘要:查看命令 cat /proc/sys/kernel/pid_max 该命令会显示系统中可用的PID的最大值。通常,这个值取决于内核和系统的配置。 查看当前已分配的PID的范围 cat /proc/sys/kernel/pid_current PID(进程标识符) 在32位系统上,PID的最大值是32 阅读全文
posted @ 2023-09-26 16:50 不会笑的孩子 阅读(598) 评论(0) 推荐(0)
摘要:fork()函数说明 fork() 是一个用于创建新进程的系统调用,fork可以在父进程中创建一个子进程。子进程是父进程的副本,frok从父进程继承了大部分资源和状态。 先简单理解一下fork()函数 #include <stdio.h> #include <stdlib.h> #include < 阅读全文
posted @ 2023-09-25 23:29 不会笑的孩子 阅读(224) 评论(0) 推荐(0)
摘要:Linux进程、线程、协程的区别 进程 进程是操作系统中的一个独立执行单元。 每个进程都有自己的独立内存空间,包括代码段、数据段、堆栈等。 进程之间通常需要通过进程间通信(IPC)来交换数据和信息。 进程启动和销毁开销较大,因为需要分配和释放独立的内存空间。 进程之间隔离度高,一个进程的崩溃不会直接 阅读全文
posted @ 2023-09-25 22:20 不会笑的孩子 阅读(149) 评论(0) 推荐(0)
摘要:在Linux操作系统中,任务调度涉及多个层次和组件,这些层次和组件共同协作以实现任务的分配和执行。以下是Linux中的任务调度层次: 硬件调度 最底层的调度发生在处理器硬件层面。硬件调度器(通常由CPU或CPU内核管理)负责在不同任务之间切换,并根据硬件特性执行任务。这包括处理硬件中断、异常处理和上 阅读全文
posted @ 2023-09-25 21:14 不会笑的孩子 阅读(74) 评论(0) 推荐(0)
摘要:基本原则 公平性 Linux调度器追求公平性,即每个运行中的进程都有机会获得CPU时间。这通过使用时间片轮转算法和动态优先级调度来实现。Linux将进程分为实时(real-time)和普通(normal)进程,以确保实时任务不会被普通任务长时间阻塞。 优先级 Linux采用了静态优先级和动态优先级相 阅读全文
posted @ 2023-09-25 21:07 不会笑的孩子 阅读(86) 评论(0) 推荐(0)
摘要:内核初始化 引导加载程序(BootLoader) 计算机首先加载引导(GRUB)。引导加载程序的任务是从存储介质(硬盘、光盘等)加载操作系统内核到内存中,并跳转到内核的启动位置。 设置堆栈和切换到保护模式 内核初始开始时,计算机可能仍让处于实模式。内核会设置堆栈,切换到保护模式或长模式(64位系统) 阅读全文
posted @ 2023-09-25 20:53 不会笑的孩子 阅读(82) 评论(0) 推荐(0)
摘要:概念 设备控制器是计算机中的一个关键组件,它用于管理和控制与计算机相连的因该你设备。每个硬件设备通常都有一个相关联的设备控制器,设备控制器负责与操作系统进行通信,并执行各种操作,如数据传输、命令执行和错误处理。 设备控制器的类型 设备控制器的类型不同,包括磁盘控制器、网络控制器、图形控制器、USB控 阅读全文
posted @ 2023-09-25 20:20 不会笑的孩子 阅读(87) 评论(0) 推荐(0)
摘要:内核运行的过程 启动阶段: 当计算机启动时,通常从硬盘、固态硬盘或其他存储设备中加载引导加载程序(Boot Loader)的第一部分。这个引导加载程序负责加载操作系统内核。 加载内核: 引导加载程序会从存储设备中加载操作系统内核的镜像文件,通常是一个称为vmlinuxz或bzImage的文件。这个内 阅读全文
posted @ 2023-09-25 09:29 不会笑的孩子 阅读(65) 评论(0) 推荐(0)
摘要:A20 A20是计算机内存地址线的第20根地址线,通常称为A20线。它在x86架构的计算机中起着重要的作用,特别是在早期的计算机中。 历史背景 早期的8086和80286处理器以及相应的计算机主板仅支持1MB的物理内存寻址。这意味着计算机只能寻址1MB的内存,而无法访问更多的内存。这是由于A20线默 阅读全文
posted @ 2023-09-25 09:11 不会笑的孩子 阅读(121) 评论(0) 推荐(0)
摘要:阅读源码时注意的事项 在第一遍阅读源码时,已弄懂整体流程为主,至于具体的实现细节先简单的理清处过一遍,不用过于纠结。 当梳理清楚全部的框架逻辑后,第二遍再深入的学习研究各个模块的实现,此时应该解决第一遍中的疑惑。 第三遍可以跳出代码的实现,来看Linux的设计思路、编程艺术和演进之路。 重在实践。L 阅读全文
posted @ 2023-09-25 08:32 不会笑的孩子 阅读(21) 评论(0) 推荐(0)
摘要:Makefile Linux内核的Makefile系统非常复杂,因为内核包含了许多不同的配置选项、架构和模块。以下是Linux内核Makefile系统中一些重要的文件和目录,以及它的作用。 顶层Makefile(Makefile) 顶层Makefile是整个内核编译过程的入口点 它包含了全局选置选项 阅读全文
posted @ 2023-09-24 22:16 不会笑的孩子 阅读(215) 评论(0) 推荐(0)
摘要:读源码时应该注意的事项 在第一遍阅读源码时,已弄懂整体流程为主,至于具体的实现细节先简单的理清处过一遍,不用过于纠结。 当梳理清楚全部的框架逻辑后,第二遍再深入的学习研究各个模块的实现,此时应该解决第一遍中的疑惑。 第三遍可以跳出代码的实现,来看Linux的设计思路、编程艺术和演进之路。 实模式 x 阅读全文
posted @ 2023-09-24 21:43 不会笑的孩子 阅读(131) 评论(0) 推荐(0)
摘要:字符设备 字符以每个字符为单位进行读写操作设备。它们是一种逐字符流式设备,字符都是独立的。 例如,键盘、USB、串口设备等通常被视为字符设备,因为它们接受和发送单个字符或字节的数据。 字符通常不支持随机访问,设备只能按顺序访问数据。因此,无法像文件系统那样以块为单位读取或写入数据。 字符的数据传输通 阅读全文
posted @ 2023-09-24 21:04 不会笑的孩子 阅读(392) 评论(0) 推荐(0)