《Linux内核设计与实现》笔记5 - 系统调用

Unix接口设计的格言:提供机制(mechanism)而不是策略(policy)。Unix系统调用抽象除了用于完成某种确定的目的的函数,至于这些函数怎么用完全不需要内核去关心。
阅读全文 →

《Linux内核设计与实现》笔记4 - 进程调度

《Linux内核设计与实现》笔记4 - 进程调度

多任务系统分为2类:

  • 非抢占式多任务系统,需要进程主动让出(yield)系统资源
  • 抢占式多任务系统,如Linux,调度程序决定何时停止运行某个进程
阅读全文 →

《Linux内核设计与实现》笔记3 - 进程管理

进程是处于执行期的程序,在内核中通常称为任务task。进程描述符存放在内核的任务队列(task list)双向链表中,链表的每一项是一个task_struct结构体,每个task_struct在32位机器上大约占1.7KB内存。

// linux/sched.h
struct task_struct{
unsigned long state;
int prio;
unsigned long policy;
struct task_struct *parent;
struct list_head tasks;
pid_t pid;
// ...
}
阅读全文 →

《Linux内核设计与实现》笔记2 - 从内核出发

内核开发的特点

  • 不能访问C函数库,不能访问标准C头文件
  • 必须使用GNU C
  • 没有用户空间的内存保护机制
  • 难以执行浮点运算
  • 内核给每个进程只有很小的栈,通常是8KB
  • 内核支持异步中断、抢占、SMP,必须注意同步和并发
  • 需要考虑可移植性
阅读全文 →

《Linux内核设计与实现》笔记1 - 介绍

原书:Linux Kernel Development 3rd. Edition,书名也可以翻译为《Linux内核开发》,书中描述的是2.6.34版内核。
阅读全文 →