linux内核
文章平均质量分 84
linux内核
bxklili
这个作者很懒,什么都没留下…
展开
-
进程(二)------进程调度
进程调度是在可运行进程之间分配有限的处理器时间资源的内核子系统,原则是最大限度地利用处理器时间,工作是在一组处于可运行状态的进程中选择一个来执行。 多任务操作系统能同时并发地交互执行多个进程,分为抢占式多任务和非抢占式多任务。在抢占式多任务模式下,调度程序会强制挂起某个进程,该动作称为抢占。进程在抢占之前能够运行的时间是预原创 2021-12-02 14:57:24 · 745 阅读 · 0 评论 -
进程(一)------进程管理
用户使用计算机的接口是用户程序,进程管理是所有操作系统的心脏,linux也不例外。一、进程1.进程描述进程是正在执行的程序代码的实时结果。为表示正在运行的程序,进程除了包含可执行程序代码,还需要包含其他资源:进程包含的其他资源打开的文件挂起的信号内核内部数据处理器状态一个或多个具有内存映射的内存地址空间及一个或多个执行线程存放全局变量的数据段执行线程是进程中活动的对象,内核调度的对象是线程而不是进程。每个线程都拥有一个独立的程序计数器原创 2021-11-26 12:23:28 · 607 阅读 · 0 评论 -
内核同步(二)
一、 原子操作原子操作是其他同步方法的基石,可以保证指令以原子的方式执行------执行过程不被打断。内核提供两组原子操作接口--------一组针对整数操作,一组针对位操作。大多数体系结构提供支持原子操作的简单算数指令或为单步执行提供了锁内存总线的指令(确保其他改变内存的操作不能同时发生)。1.原子整数操作针对整数的原子操作只能对atomic_t类型的数据进行处理。使用原子整型操作需要的声明在<asm/atomic.h>文件中,所有体系结构都保证内核使用到的所有操作的最小集。如果要原创 2021-11-25 09:27:17 · 315 阅读 · 0 评论 -
内核同步(一)
并发访问共享数据是造成系统不稳定的一类隐患,而且这种错误难以跟踪和调试,所以处理内核并发问题非常重要。产生并发的原因---->解决办法----->解决办法存在的问题产生并发的原因中断----中断几乎可以在任何时刻异步发生,可能随时打断当前正在执行的代码。软中断和tasklet----内核能在任何时刻唤醒或调度软中断和tasklet,打断当前正在执行的代码。睡眠及与用户空间的同步----在内核执行的进程可能会睡眠,这会唤醒调度程序,从而导致调度一个新的用户进程执行。内核抢占----内原创 2021-11-22 14:30:00 · 191 阅读 · 0 评论 -
进程地址空间
linux内核除了需要管理自身的内存,还需要管理用户空间进程的内存----------进程地址空间。linux内核采用虚拟内存技术,系统中的所有进程之间以虚拟方式共享内存。对一个进程而言,它好像可以访问整个系统的所有物理内存。一、地址空间进程地址空间由进程可寻址的虚拟内存组成。现代采用虚拟内存的操作系统通常都使用平坦地址空间而不是分段式的内存模式。内存地址4021f000表示的是进程32位地址空间中的一个特定字节,尽管一个进程可以寻址4GB的虚拟内存,但我们只关心有权访问的地址区间如08048000-原创 2021-11-10 16:33:23 · 1407 阅读 · 0 评论 -
块I/O层
用户访问数据时,不是直接访问硬盘,而是访问文件系统(更准确的是VFS层),VFS层负责和应用程序打交道。文件系统层将物理结构的数据抽象成便于用户理解的逻辑结构,为用户屏蔽底层硬件的实现细节。用户通过文件系统提交访问数据的请求后,文件系统再将该请求送至块I/O层,通过块I/O层实现对硬盘数据的访问。原创 2021-11-04 14:38:56 · 156 阅读 · 0 评论 -
内存管理(三)
二、栈上的静态分配三、高端内存的映射四、每个CPU的分配新的每个CPU接口使用每个CPU数据的原因原创 2021-09-24 14:11:55 · 59 阅读 · 0 评论 -
内存管理(二)
一、slab层提出原因为了便于数据的频繁分配和回收,经常用到空闲链表。当代码需要一个新的数据结构实例时,就可以从空闲链表中抓取一个,而不需要分配内存,再把数据放进去。当不再需要这个数据结构的实例时,就把它放回空闲链表,而不是释放它。空闲链表相当于对象高速缓存(快速存储频繁使用的对象类型)。内核提供slab层扮演通用数据结构缓存层的角色,有效解决空闲链表不能全局控制的问题。slab结构不同对象分属于不同高速缓存组,每种对象对应一个高速缓存。kmalloc接口就是在slab层的一组通用高速缓存上原创 2021-09-24 13:22:44 · 83 阅读 · 0 评论 -
内存管理(一)
一、内存管理1.1 页和区1 页内核把物理页作为内存管理的基本单位。从虚拟内存角度看,页就是最小单位。MMU以页为单位管理系统中的页表,把虚拟地址转换为物理地址。内核用struct page结构管理系统中的所有页。page结构与物理页相关,并非与虚拟页相关,该结构目的在于描述物理内存本身。内核需要知道一个页是否空闲,如果空闲内核还需要知道谁拥有这个页。拥有者可能是用户空间进程、动态分配内核数据、静态内核代码或页高速缓存等。struct page { unsigned long.原创 2021-09-17 14:17:06 · 100 阅读 · 0 评论 -
页高速缓存和页回写(二)
页高速缓存的结构体页高速缓存可以缓存任何基于页的对象,包含各种类型的文件和各种类型的内存映射。address_space为维持页高速缓存的普遍性,不应该将其绑定到物理文件或者inode结构体,linux使用了一个新对象管理缓存项和页I/O操作------address_space结构体。该结构体是vm_area_struct虚拟地址的物理地址对等体。文件可以有多个虚拟地址,但物理内存只有一份,只能有一个address_space数据结构。struct address_space {...原创 2021-09-07 17:31:09 · 139 阅读 · 0 评论 -
页高速缓存和页回写(一)
缓存写入进程写磁盘时,缓存有三种策略不缓存:高速缓存不去缓存任何写操作,当写入时直接跳过缓存,写到磁盘,同时使缓存中数据失效。写透:自动更新内存缓存,同时更新磁盘文件,有利于保持缓存一致性。回写 :将页高速缓存中被写入的页面标记成“脏”,并加入到脏页链表。由回写进程周期性将脏页写到磁盘。清理“脏”页标识。方便合并更多数据再一次刷新。缓存回收缓存内容需要置换,清除内容为更重要缓存项腾出位置,需要确定缓存中内容被清除的策略即缓存回收策略。先选择干净页进行简单替换,不够再进行回写...原创 2021-09-07 14:48:37 · 421 阅读 · 0 评论 -
1.内核调试
一个bug,藏匿bug的内核版本,相关内核代码的知识一、内核中的bug不好重现;症状多样;从隐藏在源码中的错误到目击者面前的bug,中间经历了一系列连锁反应。二、调试方法1.打印方式(1)通过打印调试可以在中断上下文和进程上下文,在任何持有锁被调用,在多处理器上同时被调用,而且调用者连锁都不必使用。内核消息被保存在一个LOG_BUF_LEN大小的环形队列中 用户守护进程klogd读记录缓冲区获取内核消息,可以从/proc/kmsg文件中,也可以通过syslog()系统调用读取.原创 2021-09-02 09:59:49 · 181 阅读 · 0 评论 -
linux内存分配方法总结
内存映射结构:1.32位地址线寻址4G的内存空间,其中0-3G为用户程序所独有,3G-4G为内核占有。2.struct page:整个物理内存在初始化时,每个4kb页面生成一个对应的struct page结构,这个page结构就独一无二的代表这个物理内存页面,并存放在mem_map全局数组中。3.段式映射:首先根据代码段选择子cs为索引,以GDT值为起始地址的段描述表中选择出对应的段描述符,随后根...转载 2018-04-24 20:02:01 · 2002 阅读 · 0 评论 -
linux根文件系统挂载过程
initramfs当linux内核启动后,会找到并执行第一个用户程序,一般是init。这个程序存在于文件系统当中,文件系统存在于设备上,但不知道init存在哪个设备上,于是有了内核命令列选项root=,用来指定root文件系统存在于哪个设备上。然后由于后来的设备类型越来越来多,比如可能在scsi,sata,flash这些设备,还有的存在于网络设备上,不可能把这些设备的驱动编译进内核转载 2017-12-14 13:11:15 · 924 阅读 · 0 评论