idt可以查看IDT表 GDT全局描述表 windows分为实模式(内核)和保护模式 实模式,Segment+Offset的方式访问,Segment16位(向后兼容,cpu位数增加寄存器位数增加,16位段寄存器数据被写入内存...,段+偏移转换为线性地址后,通过分页管理,映射到新的地址空间,页目录+页表+页内偏移(12位4k),减小内存间隙的大小 地址通过三次转换: 逻辑地址(段+偏移)>> 线性地址(分页)>> 物理地址 内核内存管理参考...E9%A1%B5&spm=1018.2226.3001.4187 LDT局部描述表 任务切换,系统当前的局部描述符表LDT也随之切换,LDT实现了任务间的隔离,GDT可以存放任务共享的段 SSDT表 内核到应用层的函数映射
内核为所有的I/O创建了3种数据结构表示打开文件,它们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响。 每个进程在进程表中都有一个记录项,记录项中包含一张打开文件描述符表。...内核为所有打开文件维持一张文件表。包含了文件状态(读,写等),文件偏移量,指向i节点的指针。 每打开一个文件,都有一个i节点,它包含了文件类型和对该文件进行各种操作函数的指针。 ?...同一进程打开不同文件的内核数据结构 这个图本来描述的是UNIX操作系统的,在Linux中没有这个V节点,而是采用了一个与文件系统相关的i节点和一个与文件系统无关的i节点。...文件系统:文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。...在fork后会发生的情形是多个文件描述符指向同一文件表。此时,父子进程各自的每一个文件描述符共享同一个文件表。这样的数据结构在多个进程读取同一文件的时候,是没有问题的。
也是通过_dnode 实现的 2 红黑树节点(rbnode ) 位于sys/rb.h struct rbnode { struct rbnode *children[2]; };) 进一步,红黑树的结构定义...Z_MAX_RBTREE_DEPTH]; unsigned char iter_left[Z_MAX_RBTREE_DEPTH]; #endif }; 3 _thread_base 有了前面_dnode和rbnode 的结构基础...,接下来看看线程的基础结构_thread_base 的定义,如下: /* can be used for creating 'dummy' threads, e.g. for pending on objects...CONFIG_SYS_CLOCK_EXISTS /* this thread's entry in a timeout queue */ struct _timeout timeout; #endif }; 4 线程结构
文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...: 其系统调用是相同的 , 新的版本可能会增加新的系统调用 ; 设备文件 : 各内核版本的设备文件都是相同的 , 但是 内部接口 可能不同 ; 二、使用 VSCode 阅读 Linux 内核源码 --...开发环境 ( 下载 Visual Studio Code 安装器 | Visual Studio Code ) 博客 , 安装 VSCode 软件 ; 打开 VSCode , 选择 ” 菜单栏 / 文件.../ 打开文件夹 ” 选项 , 选择 Linux 内核源码目录 , 点击 ” 选择文件夹 ” 按钮 , 此时就可以在 VSCode 中阅读 Linux 内核源码 ; 发布者:全栈程序员栈长,转载请注明出处
文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...: 其系统调用是相同的 , 新的版本可能会增加新的系统调用 ; 设备文件 : 各内核版本的设备文件都是相同的 , 但是 内部接口 可能不同 ; 二、使用 VSCode 阅读 Linux 内核源码 --...开发环境 ( 下载 Visual Studio Code 安装器 | Visual Studio Code ) 博客 , 安装 VSCode 软件 ; 打开 VSCode , 选择 " 菜单栏 / 文件.../ 打开文件夹 " 选项 , 选择 Linux 内核源码目录 , 点击 " 选择文件夹 " 按钮 , 此时就可以在 VSCode 中阅读 Linux 内核源码 ;
ext4挂载 在linux 5.x的内核中,实际文件系统的挂载采用新的挂载API,引入了struct fs_context用于内部文件系统挂载的信息。...struct mount结构,然后再这个函数里面调用do_add_mount完成ext4文件系统的挂载 static int do_new_mount_fc(struct fs_context *fc,...vfs层包含了是实际文件系统的内存影像 用户进程调用open函数,传入文件名称、打开文件的flags、文件的权限等信息,进入内核态的do_sys_open函数 进入do_sys_open函数,首先是执行...get_unused_fd_flags从当前的进程中申请未被使用的文件描述符 其次是构建一个struct file结构,该结构是每个进程打开的fd关联的文件。...,这个也是从用户态参数初始化而来 // 系统调用的入口,传入文件名称、文件打开模式、文件mode,进入内核态 SYSCALL_DEFINE3(open, const char __user *, filename
文章目录 一、查看 .config 编译配置文件 二、正式编译内核 一、查看 .config 编译配置文件 ---- 在上一篇博客 【Linux 内核】编译 Linux 内核 ④ ( 打开 Linux...内核编译 菜单配置 |菜单配置中的光标移动与选中状态 | 保存配置 | 配置项帮助文档 ) 中 , 已经将编译配置保存到了 .config 文件中 ; 查看 .config 编译配置文件 , 在 linux...内核源码根目录中 , 执行 gedit .config 命令 , 查看 .config 编译配置文件 : ( 也可以使用 vi , vim 等文本编辑器查看 ) 在 .config 配置中 , #...代表注释 , CONFIG_IRQ_WORK=y 等号右侧的 y 表示同意该操作 ; .config 文件内容示例 : 配置文件很多 , 这里只贴出一部分 ; # # Automatically generated...---- 在 Linux 内核源码根目录 , 执行 sudo make j4 开始编译 Linux 内核 ;
本章主要内容面向接触过C++的老铁 主要内容含: 一.区分内核文件结构体file和files_struct&C标准库中文件结构体FILE FILE结构体:是 C标准库 中定义的一个结构体,用于表示一个打开的文件流...file结构体:它代表一个打开的文件,是Linux内核中的结构体 区分: files_struct结构体:是Linux内核中定义的一个结构体,用于表示 进程级别 的文件描述符表,并记录了该进程当前打开的所有文件的信息...如下图:进程结构体task_struct有一个文件指针指向files_struct结构体,files_struct结构体经过系统调用open后生成file结构体: 二.文件描述符fd与进程文件描述符表...fd_array 1.file_struct结构体介绍 files_struct结构体是Linux内核中定义的一个结构体,用于表示进程级别的文件描述符表。...每个指针都指向一个打开的文件的file结构体,而文件描述符就是该指针数组的下标。 **文件引用计数:**files_struct结构体还包含了一些用于管理文件描述符和文件引用的计数信息。
一、打开文件内核数据结构 1、一个进程打开两个文件 文件状态标志:读、写、追加、同步、非阻塞等 2、一个进程两次打开同一文件 3、两个进程打开同一文件 示例程序: /****************...* 文件表(包括文件状态(读写追加同步非阻塞等),当前文件偏移量, * 文件引用次数(当有两个fd指向同个文件表时引用计数为2,见dup,也可用于重定向), * 文件操作指针, V节点指针等...文件表是不共享的,即各有自己的文件偏移量和打开文件标志,所以两次read不同的fd都是从头开始读取,但V节点表是共享的,在fd2写入(同个文件表的read和write是共享偏移的)更改了inode指向的硬盘数据块...二、I/O重定向 当我们执行了dup(3)之后,系统选择一个空闲的文件描述符即4,这样就有两个文件描述符指向同个文件表,所以引用计数为2。...利用dup等函数可以进行重定向的步骤是先close输入输出文件描述符,然后执行dup(fd), 这样输入输出文件描述符也指向fd指向的文件,这样就实现了重定向。
1、前言 最近项目中用到一个环形缓冲区(ring buffer),代码是由linux内核的kfifo改过来的。缓冲区在文件系统中经常用到,通过缓冲区缓解cpu读写内存和读写磁盘的速度。...例如一个进程A产生数据发给另外一个进程B,进程B需要对进程A传的数据进行处理并写入文件,如果B没有处理完,则A要延迟发送。...Linux内核的kfifo正好是一个环形队列,可以用来当作环形缓冲区。生产者与消费者使用缓冲区如下图所示: ?...2、linux 内核kfifo kfifo设计的非常巧妙,代码很精简,对于入队和出对处理的出人意料。...首先看一下kfifo的数据结构: struct kfifo { unsigned char *buffer; /* the buffer holding the data */
跟随陈老师学习linux内核两个月了,对linux内核产生了极大的兴趣,最近学习文件系统,有一些自己的看法,很荣幸能在linux内核之旅进行分享^_^ 本篇文章使用尽量通俗的语言来说明linux内核文件系统中各个数据结构之间的关系...(file结构体之后的dentry结构体部分先保留。) 第二条线(红紫色) 这一条线是纯正的文件系统线,也就是我们现在是文件系统,我现在需要正确的进入内核。...,换句话说,内核中有多少个文件系统,就有多少个file_system_type结构体。...super_block也是一个极其庞大的结构体,它既然处于管理的地位,所以具体的一个个文件就需要和它进行关联,按照内核标准套路,一个个具体的文件在内核中还是抽象成一个结构体,就是图中的第5个结构体inode...,那么inode代表了一个个实际的文件,这时候,自然而然就需要目录了,内核把目录也当做一个文件来处理,同样抽象成一个结构体,也就是图中的第6个结构体dentry结构体。
但是现在的嵌入式系统中可能将根文件系统保存到各种存储设备上,包括scsi、sata,u-disk等等。因此把这些设备的驱动代码全部编译到内核中显然就不是很方便。...当系统启动的时候,bootloader会把initrd文件读到内存中,然后把initrd文件在内存中的起始地址和大小传递给内核 内核在启动初始化过程中会解压缩initrd文件,然后将解压后的initrd...(该initramfs是经过gzip压缩后的cpio格式的数据文件),该cpio格式的文件被链接进了内核中特殊的数据段.init.ramfs上 其中全局变量__initramfs_start和__initramfs_end...内核启动时会对.init.ramfs段中的数据进行解压,然后使用它作为临时的根文件系统。...内核挂载rootfs之后需要将ramdisk中的解压到rootfs中,因此内核必须知道ramdisk在内存上的地址。已知有三种方式可以通知内核ramdisk的位置。
Windows 内核编程并没有提供像 Ring3 层的 CopyFile 这样的 API,看了看书中的例子自己写了一份 MyCopyFile,以后用来备用。...GENERIC_READ GENERIC_WRITE, // 打开文件的权限 &object_attributes, // 文件对象的描述信息...io_status, // 操作结果结构体 NULL, // 文件创建后的初始大小...FILE_ATTRIBUTE_NORMAL, // 文件属性信息 FILE_SHARE_READ, // 其他文件打开时的属性...IO_STATUS_BLOCK io_status = { 0 }; #if DBG _asm int 3 #endif do { // 分别打开文件得到文件句柄
如果误操作了/boot目录下kernel文件,会导致无法进入系统,此时,必须要借助第三方系统来进行kernel的修复。 以下以 Ubuntu 16.04系统为例,介绍修复的方法。
让我们了解和熟悉基本的Linux内核相关的信息,Linux内核我们主要从以下几个方面来讲解: Linux内核-什么是内核 Linux内核-内核模块&参数 Linux内核-proc文件系统(本章节) Linux...内核-sys文件系统 Linux内核-tmpfs文件系统 我们上一小节里面修改内核参数的时候,还有在Linux入门-目录介绍的时候也说过/proc是虚拟目录。...二、目录结构及内容 关于系统信息的文件 文件“/proc/cpuinfo”:包含有关系统 CPU 的详细信息,如处理器型号、频率、缓存大小等。...文件“/proc/meminfo”:提供系统内存使用情况的信息,包括总内存、可用内存、已用内存等。 文件“/proc/version”:显示内核版本信息。...文件"/proc/ modules":显示的就是当前加载的内核模块,等于lsmod显示的模块内容。 目录“/proc/sys”:这个目录下的文件可以用来调整内核参数,影响系统的行为和性能。
让我们了解和熟悉基本的Linux内核相关的信息,Linux内核我们主要从以下几个方面来讲解: Linux内核-什么是内核 Linux内核-内核模块&参数 Linux内核-proc文件系统 Linux内核...-sys文件系统(本章节) Linux内核-tmpfs文件系统 在讲sys文件系统系统之前,我们先思考一个问题?...在 Linux 系统中,/sys 目录是一个虚拟文件系统,它提供了关于系统设备、内核参数以及硬件状态等信息的接口。...二、目录结构 /sys/devices/: 这是 /sys 目录中最重要的子目录之一,它包含了系统中所有的设备信息。...每个设备在这个目录下都有一个对应的子目录,其中包含了设备的属性文件、链接和其他相关信息。
让我们了解和熟悉基本的Linux内核相关的信息,Linux内核我们主要从以下几个方面来讲解: Linux内核-什么是内核 Linux内核-内核模块&参数 Linux内核-proc文件系统 Linux内核...-sys文件系统 Linux内核-tmpfs文件系统(本章节) 前面讲了2个虚拟文件系统,一个是主要是针对内核的,一个主要是针对cgroup,而tmpfs则是第三个虚拟文件系统,那它是主要针对什么呢?...devtmpfs devtmpfs是一种在 Linux 内核中用于管理设备文件的临时文件系统。...它在内核启动过程中自动创建,并随着系统运行持续存在,为用户空间提供了一种统一的方式来访问设备文件。...而devtmpfs简化了这个过程,内核可以自动在这个文件系统中创建和管理设备文件。
文件系统层次结构标准(英语:Filesystem Hierarchy Standard,FHS)定义了Linux操作系统中的主要目录及目录内容。...在大多数情况下,它是一个传统BSD文件系统层次结构的形式化与扩充。 / 第一层次结构 的根、 整个文件系统层次结构的根目录。...[10] /proc/ 虚拟文件系统,将内核与进程状态归档为文本文件。例如:uptime、 network。在Linux中,对应Procfs格式挂载。.../usr/share/ 体系结构无关(共享)数据。 /usr/src/ 源代码,例如:内核源代码及其头文件。 /usr/X11R6/ X Window系统 版本 11, Release 6..../var/lock/ 锁文件,一类跟踪当前使用中资源的文件。 /var/log/ 日志文件,包含大量日志文件。 /var/mail/ 用户的电子邮箱。
在笔者的上一篇文章《驱动开发:内核特征码扫描PE代码段》中LyShark带大家通过封装好的LySharkToolsUtilKernelBase函数实现了动态获取内核模块基址,并通过ntimage.h头文件中提供的系列函数解析了指定内核模块的...PE节表参数,本章将继续延申这个话题,实现对PE文件导出表的解析任务,导出表无法动态获取,解析导出表则必须读入内核模块到内存才可继续解析,所以我们需要分两步走,首先读入内核磁盘文件到内存,然后再通过ntimage.h...导出函数存储在PE文件的导出表里,导出表的位置存放在PE文件头中的数据目录表中,与导出表对应的项目是数据目录中的首个IMAGE_DATA_DIRECTORY结构,从这个结构的VirtualAddress...首先使用InitializeObjectAttributes()打开文件,打开后可获取到该文件的句柄,InitializeObjectAttributes宏初始化一个OBJECT_ATTRIBUTES结构体...); 最后读取导出表就要将一个磁盘中的文件映射到内存中,内存映射核心文件时ZwMapViewOfSection()该系列函数在应用层名叫MapViewOfSection()只是一个是内核层一个应用层,这两个函数参数传递基本一致
答案一定是: LOS_DL_LIST(双向链表),它长这样.typedef struct LOS_DL_LIST {//双向链表,内核最重要结构体 struct LOS_DL_LIST *pstPrev...前后指针(注者后续将比喻成一对左右触手)灵活的指挥着系统精准的运行,越是深入分析内核源码,越能感受到内核开发者对LOS_DL_LIST非凡的驾驭能力,笔者仿佛看到了无数双手前后相连,拉起了一个个双向循环链表...确实LOS_DL_LIST这个结构看起来怪怪的,它竟没有数据域!所以看到这个结构的人第一反应就是我们怎么访问数据?...pid_t waitpid(pid_t pid, int *status, int options);将任务挂到waitList上.鸿蒙waitpid系统调用为SysWait,具体看进程回收篇.双向链表是内核最重要的结构体...,精读内核的路上它会反复的映入你的眼帘,理解它是理解内核运作的关键所在!
领取专属 10元无门槛券
手把手带您无忧上云