
趣谈Linux操作系统 学习
墨1024
抬头看路,低头做事,回头自省
展开
-
一步一步学linux操作系统 目录
linux 操作系统 内核 学习 目录,包括 综述、系统初始化、进程、内存、文件、输入输出、进程间通讯、网络等模块原创 2020-07-29 00:23:36 · 684 阅读 · 0 评论 -
一步一步学linux操作系统: 01 linux操作系统与外包公司
linux操作系统原创 2020-06-08 22:27:40 · 530 阅读 · 0 评论 -
一步一步学linux操作系统: 02 linux操作系统的几个系统调用
linux,系统调用原创 2020-06-09 23:55:09 · 621 阅读 · 0 评论 -
一步一步学linux操作系统: 03 计算机工作模式与x86架构简介
计算机工作模式, x86架构简介原创 2020-06-10 23:01:51 · 462 阅读 · 0 评论 -
一步一步学linux操作系统: 04 从BIOS到bootloader
BIOS 与 bootloader、Grub2;实模式切换到保护模式原创 2020-06-11 23:18:35 · 606 阅读 · 0 评论 -
一步一步学linux操作系统: 05 内核初始化
linux内核初始化中几个重要的 init原创 2020-06-14 23:25:36 · 620 阅读 · 0 评论 -
一步一步学linux操作系统: 06 系统调用
linux 内核,glibc 对系统调用的封装, 32 位系统调用过程,64 位系统调用过程原创 2020-06-15 23:16:19 · 781 阅读 · 0 评论 -
一步一步学linux操作系统: 07 进程与程序运行
linux 进程与程序运行原创 2020-06-17 01:19:53 · 371 阅读 · 0 评论 -
一步一步学linux操作系统: 08 多线程与互斥锁、条件变量
linux,线程,多线程与互斥锁、条件变量原创 2020-06-17 23:27:37 · 323 阅读 · 0 评论 -
一步一步学linux操作系统: 09 进程数据结构_task_struct字段_任务 ID、信号处理、任务状态、进程调度
linux,进程数据结构,task_struct,任务 ID、信号处理、任务状态、进程调度原创 2020-06-24 00:18:53 · 600 阅读 · 0 评论 -
一步一步学linux操作系统: 10 进程数据结构_task_struct字段_运行统计、亲缘关系、进程权限、内存管理
linux, 进程数据结构, task_struct, 运行统计、亲缘关系、进程权限、内存管理原创 2020-06-25 12:09:04 · 620 阅读 · 0 评论 -
一步一步学linux操作系统: 11 进程数据结构_task_struct字段_内核栈
进程数据结构,task_struct字段,内核栈原创 2020-06-27 02:34:38 · 1258 阅读 · 1 评论 -
一步一步学linux操作系统: 12 进程调度一_调度策略与调度类介绍
进程调度、调度策略与调度类介绍、原创 2020-06-28 23:43:15 · 1021 阅读 · 0 评论 -
一步一步学linux操作系统: 13 进程调度二_主动调度
进程调度可分为主动调度与抢占式调度,主动调度 、schedule 函数、进程上下文切换原创 2020-06-30 00:48:40 · 916 阅读 · 0 评论 -
一步一步学linux操作系统: 14 进程调度三完_抢占式调度
进程调度、抢占式调度原创 2020-07-01 00:10:41 · 795 阅读 · 0 评论 -
一步一步学linux操作系统: 15 进程是如何创建的_fork都做了些什么
进程的创建,fork 系统调用原创 2020-07-03 00:58:44 · 876 阅读 · 0 评论 -
一步一步学linux操作系统: 16 线程是如何创建的以及与进程创建的区别
线程是如何创建的以及与进程创建的区别无论是进程还是线程,在内核里面都是任务线程不是一个完全由内核实现的机制,它是由内核态和用户态合作完成的。原创 2020-07-05 17:32:35 · 1163 阅读 · 0 评论 -
一步一步学linux操作系统: 17 内存管理_进程内存空间布局
内存空间:内存空间都是独立的、相互隔离的。对于每个进程来讲,看起来应该都是独占的。内存管理内存管理包含: 物理内存管理; 虚拟内存管理; 两者的映射(虚拟地址和物理地址如何映射)使用内存的几种方式简单的程序#include <stdio.h>#include <stdlib.h>int max_length = 128;char * generate(int length){ int i; char * buffer = (char*) malloc原创 2020-07-06 22:46:18 · 302 阅读 · 0 评论 -
一步一步学linux操作系统: 18 内存管理_内存映射与分段、分页机制
分段机制分段机制下虚拟地址的组成虚拟地址 = 段选择子(段寄存器) + 段内偏移量段选择子 = 段号(段表索引) + 标识位段表 = 物理基地址 + 段界限(偏移量范围) + 特权等级段选择子保存在段寄存器里面段选择子里面最重要的是段号,用作段表的索引段表里面保存的是这个段的基地址、段的界限和特权等级等段内偏移量虚拟地址中的段内偏移量应该位于 0 和段界限之间段内偏移量是合法的,就将段基地址加上段内偏移量得到物理内存地址Linux 中的分段机制在 Linu原创 2020-07-09 00:20:31 · 737 阅读 · 0 评论 -
一步一步学linux操作系统: 19 内存管理_进程的虚拟内存空间的管理
用户态和内核态的划分struct mm_struct 结构来管理内存,是struct task_struct中的一个成员变量\include\linux\sched.hstruct mm_struct *mm;task_size 是struct mm_struct 里面的一个成员变量\include\linux\mm_types.hunsigned long task_size; /* size of task vm space */整个虚拟内存空间要一分为二,一部分是用户原创 2020-07-14 00:45:22 · 527 阅读 · 0 评论 -
一步一步学linux操作系统: 20 内存管理_NUMA 方式物理内存管理_节点、区域、页以及伙伴系统(Buddy System)
物理内存的组织方式平坦内存模型把内存想象成由连续的一页一页的块组成的,从 0 开始对物理页编号,每个物理页都会有个页号。由于物理地址是连续的,页也是连续的,每个页大小也是一样的。因而对于任何一个地址,只要直接除一下每页的大小,就能直接算出在哪一页。每个页有一个结构 struct page 表示,并放在一个数组里面,这样很容易根据页号,通过数组下标找到相应的 struct page 结构。对称多处理器图片来自极客时间趣谈linux操作系统CPU 有多个,在总线的一侧。所有的内存条组成一大片内存原创 2020-07-15 01:25:51 · 919 阅读 · 0 评论 -
一步一步学linux操作系统: 21 内存管理_小内存分配与页面换出
slub 分配器工作原理相关函数与结构体进程创建的do_fork中会调用copy_process函数,这个函数会调用 dup_task_struct 函数\linux-4.13.16\kernel\fork.cdup_task_struct函数\linux-4.13.16\kernel\fork.cdup_task_struct 调用函数 alloc_task_struct_node,分配一个 task_struct 对象,用于复制task_structalloc_task_struct_原创 2020-07-22 00:01:17 · 571 阅读 · 0 评论 -
一步一步学linux操作系统: 22 内存管理_用户态内存映射
mmap 的原理虚拟地址空间中,每一个进程都有一个列表 vm_area_struct,指向虚拟地址空间的不同的内存块,这个变量的名字叫 mmap。参见 https://blog.youkuaiyun.com/leacock1991/article/details/107328814struct mm_struct { struct vm_area_struct *mmap; /* list of VMAs */......}struct vm_area_struct { /* *原创 2020-07-27 23:15:49 · 588 阅读 · 0 评论 -
一步一步学linux操作系统: 23 内存管理_内核态内存映射
内核页表和用户态页表不同,在系统初始化的时候,就要创建内核页表swapper_pg_dirarch/x86/include/asm/pgtable_64.hextern pud_t level3_kernel_pgt[512];extern pud_t level3_ident_pgt[512];extern pmd_t level2_kernel_pgt[512];extern pmd_t level2_fixmap_pgt[512];extern pmd_t level2_ident_原创 2020-07-29 00:11:21 · 630 阅读 · 0 评论 -
一步一步学linux操作系统: 24 文件系统_简要介绍
文件系统的功能规划1、文件系统要有严格的组织形式,能够以块为单位进行存储2、文件系统中也要有索引区,用来方便查找一个文件分成的多个块都存放在了什么位置。3、文件系统应该有缓存层,用于存放文件系统中的热点文件,近期经常被读取和写入。4、文件用文件夹的形式组织起来,方便管理和查询。5、Linux 内核要在内存里面维护一套数据结构,来保存哪些文件被哪些进程打开和使用。文件系统相关命令行格式化将一块盘使用命令组织成一定格式的文件系统的过程Windows,常格式化的格式为 NTFS(New Te原创 2020-08-01 23:38:13 · 342 阅读 · 0 评论 -
一步一步学linux操作系统: 25 文件系统_硬盘文件系统
硬盘图片来自极客时间趣谈linux操作系统硬盘→盘片→磁道→扇区(每个 512 字节)文件系统就是安装在这样的硬盘之上Linux 下最主流的文件系统格式——ext 系列的文件系统的格式inode 与块的存储块(Block)硬盘分成相同大小的单元,块(Block)一块的大小是扇区大小的整数倍,默认是 4K(格式化设置)一个文件不用给他分配一块连续的空间,分散成一个个小块进行存放inode 结构需要一个结构 inode 来存放文件通过块来存储的信息inode 数据结构\linux-4原创 2020-08-10 23:20:10 · 501 阅读 · 0 评论 -
一步一步学linux操作系统: 26 文件系统_虚拟文件系统、挂载文件系统与打开文件
进程往文件系统读写数据简要流程应用层进程在进行文件读写操作时,可通过系统调用如 sys_open、sys_read、sys_write 等。内核每个进程为打开的文件维护一定的数据结构整个系统打开的文件也需要维护一定的数据结构虚拟文件系统Linux 可以支持多达数十种不同的文件系统其实现各不相同,为了统一接口Linux 内核向用户空间提供了虚拟文件系统来对文件系统进行操作常见的文件系统对象模型,例如 inode、directory entry、mount 等操作这些对象的方法,例原创 2020-08-12 23:34:53 · 807 阅读 · 0 评论 -
一步一步学linux操作系统: 27 文件系统_文件缓存 与 read write读写文件
系统调用层和虚拟文件系统层文件系统的读写,就是调用系统函数 read 和 write,读和写的很多逻辑是相似的。read 和 write 系统调用在内核里面的定义SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count){ struct fd f = fdget_pos(fd);...... loff_t pos = file_pos_read(f.file); ret = vfs_read(f原创 2020-08-16 13:17:33 · 1325 阅读 · 3 评论 -
一步一步学linux操作系统: 28 输入与输出系统_输入与输出设备的管理
用设备控制器屏蔽设备差异I/O 设备多种多样, 通过设备控制器控制设备CPU 并不直接和设备打交道,它们中间有一个叫作设备控制器(Device Control Unit) 的组件,设备控制器有它的芯片,类似小 CPU,执行自己的逻辑。它也有它的寄存器。这样 CPU 就可以通过写这些寄存器,对控制器下发指令,通过读这些寄存器,查看控制器对于设备的操作状态输入输出设备大致可以分为两类:块设备(Block Device) 和 字符设备(Character Device)。块设备块设备将信息存储在固定大原创 2020-08-16 21:29:18 · 720 阅读 · 0 评论 -
一步一步学linux操作系统: 29 输入与输出系统_ 字符设备一_打开、读写与IOCTL 控制
linux 内核 ,输入输出设备,字符设备,内核模块,打开,读写,ioctl控制原创 2020-08-23 14:48:08 · 1057 阅读 · 0 评论 -
一步一步学linux操作系统: 30 输入与输出系统_ 字符设备二_中断处理机制
输入与输出系统,字符设备,中断处理机制原创 2020-08-24 23:40:49 · 470 阅读 · 0 评论 -
一步一步学linux操作系统: 31 输入与输出系统_ 块设备一_块设备 mknod 和 打开流程以及mount流程
块设备的 mknod、打开流程,以及 块设备的 mount下层流程原创 2020-08-30 17:54:02 · 1769 阅读 · 3 评论 -
一步一步学linux操作系统: 32 输入与输出系统_ 块设备二_直接 I/O,缓存 I/O 与 块设备数据写入请求
缓存 I/O 如何访问块设备? 如何向块设备层提交请求?块设备的初始化、请求提交与调度、请求的处理原创 2020-09-18 00:31:18 · 1185 阅读 · 1 评论 -
一步一步学linux操作系统: 33 进程间通讯_管道、消息队列、共享内存与信号量
管道、消息队列、共享内存与信号量原创 2020-09-21 22:29:32 · 420 阅读 · 0 评论