随笔分类 - Linux kernel
摘要:内核与操作系统 由于一些商业操作系统设计上的缺陷以及日益庞杂,“操作系统”的概念对很多人而言变得含糊不清。在进一步讨论Linux内核的话题前,我们先区分“内核”与“操作系统”这两个概念。 操作系统:指在整个系统中完成最基本功能和系统管理的部分,包括内核、设备驱动、文件管理工具、系统管理工具、shel
阅读全文
摘要:调度器完成以下任务: 时钟中断(或类似的定时器)时间内刷新进程的时间片,设置进程调度标志 系统调用返回或中断完成时检查调度标志 schedule函数 内核代码中完成进程调度的函数为schedule(),该函数中包含以下调用: put_prev_task(rq, prev); next = pick_
阅读全文
摘要:库文件 先从我们熟悉的c库入手,理解系统调用(system call)。c代码中调用printf函数,经历了以下调用过程: 最终输出的功能由内核中write调用完成,c库封装了系统调用。 对于以下hello world程序: 我们可以使用ldd查看程序依赖的库文件: 输出结果中显示了hello程序依
阅读全文
摘要:cpu与磁盘、网卡、键盘等外围设备(相对于cpu和内存而言)交互时,cpu下发I/O请求到这些设备后,相对cpu的处理能力而言,磁盘、网卡等设备需要较长时间完成请求处理。 那么在请求发出到处理完成这段时间,应如何设定cpu的行为,既能让这期间运行的其他程序得到执行,又能在外设处理完成后,cpu及时获
阅读全文
摘要:内核同步 内核同步解决并发带来的问题,多个线程对同一数据进行修改,数据会出现不一致的情况,同步用于保护共享数据等资源。 有两种形式的并发: 访问共享数据的那部分代码被称为临界区。 原子操作 不可打断的操作为原子操作,一条汇编指令不可被中断,其为原子操作。在内核代码中,我们可以看到类似atomic64
阅读全文
摘要:内核中时钟主要完成以下作用: 记录系统运行时间 完成时间相关的统计功能,如cpu占用率等 定时功能,设定某个进程一段时间后完成某项任务 为实现以上功能,硬件以及内核提供了不同类型的时钟。 RTC 实时时钟(real time clock,RTC),又叫硬件时钟、墙上时钟。RTC记录的是00:00:0
阅读全文
摘要:vfs(the virtual filesystem, virtual file switch)为应用程序访问文件提供了统一的接口,如read、write、open等。 下面我们看加载文件系统模块、格式化磁盘、挂载磁盘,这些步骤相应的内核实现,vfs在其中又发挥了哪些作用。 文件系统在内核中由fil
阅读全文
摘要:本文将介绍网络连接建立的过程、收发包流程,以及其中应用层、tcp层、ip层、设备层和驱动层各层发挥的作用。 应用层 对于使用socket进行网络连接的服务器端程序,我们会先调用socket函数创建一个套接字: 以上指定了连接协议,socket调用返回一个文件句柄,与socket文件对应的inode不
阅读全文
摘要:Linux下,I/O处理的层次可分为4层: 1. 系统调用层,应用程序使用系统调用指定读写哪个文件,文件偏移是多少 2. 文件系统层,写文件时将用户态中的buffer拷贝到内核态下,并由cache缓存该部分数据 3. 块层,管理块设备I/O队列,对I/O请求进行合并、排序 4. 设备层,通过DMA与
阅读全文