Linux内核笔记-进程调度
现代操作系统都可以同时运行若干进程,对于单核CPU,给定时刻只会有一个进程运行,CPU快速的在各个进程中切换,给用户以多个进程同时运行的错觉,对于多核CPU,可以真正并发运行多个进程,取决于CPU的数目。
世有繁务,自留闲亩
现代操作系统都可以同时运行若干进程,对于单核CPU,给定时刻只会有一个进程运行,CPU快速的在各个进程中切换,给用户以多个进程同时运行的错觉,对于多核CPU,可以真正并发运行多个进程,取决于CPU的数目。
Linux 是非常出色的操作系统,通过阅读内核源码,能够清楚的理解现代操作系统的构架和任意细节,但 Linux 内核代码非常庞大,而且有很多与硬件相关的细节,阅读代码有些吃力,不过只要了解内核代码的构架,可对自己迷惑的部分单独分析。
Linux 文件系统有着复杂的结构,仅仅概念就有file,dentry,inode,vfsmount,super_block等等,还有他们之间的关联,细节虽然繁多,但只要抓住主干框架,其他的细节通过阅读源码都可顺理成章的理解。这里Linux …
在程序中打印变量地址时,往往在不同的程序中都可能打印相同的地址,显然它们并不是占用相同的物理空间,它们之所以地址相同,得益于内核提供的虚拟地址空间的机制。
中断和异常的定义 中断和异常其实都属于中断,中断分为同步中断和异步中断,同步中断指处理器发生的异常,如除0错误;异步中断指CPU外部事件引发,如IO设备中断,因为中断可以发生在任何时刻,与当前CPU时钟周期没有任何关系。
UML调试Linux内核 最近看了些Linux内核源码,之前认为调试内核源码最好的方式是使用Qemu虚拟机,结合GDB调试,虽然在网上也看到一些这种调试方式的弊端,但感觉虚拟机支持调试是最完美的事情,虽然Bochs更为灵活甚至内置调试器,但 …
slab 介绍 内存分配与释放向来是程序设计中的难点,在C语言中有malloc可以方便使用,但还是有更多的针对具体业务的实现。内存分配需要考虑分配效率和内存使用率的平衡,当用户申请一块内存,程序需要在空闲内存中查找合适的内存块返回,这里可以 …
内核链表 Linux内核有一些基本的数据结构,这些数据结构是Linux实现的基础,对于链表相信大家都不陌生,但是Linux内核中的链表与平常我们所使用的链表略有不同,第一次遇到或许会感到困惑。
操作系统管理软硬件资源,用户进程只能直接或间接的通过系统调用访问系统资源,而用户进程与内核运行于不同的权限空间,需要进行用户态到内核态的转变,这一转变是通过系统中断实现。现以getpid为例:
Linux系统下网络模型数select最为常用,当然,select只是检测文件系统数据状态,并不只局限于网络编程,select的功能需要底层驱动提供支持,其中核心应用即为等待队列,其他模型,如poll和epoll,对驱动来说并无区别,驱动只 …