源码地址:www.kernel.org
/usr/src/linux
Linux 是个真正的unix内核,但它不是一个完全的linux操作系统
IEEE POSIX :基于unix的可移植操作系统
CAE: 公共应用环境
UNIX 操作系统的特点: 诸如虚拟存储,虚拟文件系统,轻量级进程,Unix信号量,SVR4进程间通信,支持多对称处理器系统
线程的上下文切换比进程代价小的多:因为前者通常在同一个地址空间执行
多线程应用程序的支持:用户程序根据许多相对独立的执行流来设计,而这些执行流共享应用程序的大部分数据结构。一个多线程应用程序由许多轻量级进程LWP组成,这些进程可能共享地址空间,物理内存页,打开文件等操作。Linux定义了自己的轻量级进程版本。Linux把LWP作为基本的执行上下文,通过非标准的clone()系统调用来处理它们!
多处理器支持:SMP
硬件为CPU引入至少两种不同的执行模式:用户态;内核态
Unix 是实施系统资源硬件保护的多用户系统。
超级用户: root
进程间通信机制:
信号量
消息队列
共享内存 shmget() shmat() shmdt()
这三个统称为System V IPC // 显式获得资源分别是:shmget() semget() msgget()
管道
FIFO
POSIX 消息队列 // 类似于System V IPC 消息队列 更简单的基于文件的接口
进程管理
fork() 创建新进程
_exit() 终止一个进程
exec() 装入一个新程序
线性地址:
目录+表+offset(12bit)
页: 一组数据
页框:内存中的物理地址
每一个进程有自己的页全局目录和页表集,当发生进程切换时:Linux 把cr3控制寄存器的内容保存在前一个执行进程的描述符中,然后把下一个要执行的进程的描述符的值装入cr3寄存器中。新进程重新开始在CPU上执行时,分页单元指向了一组新的页表。
线性地址映射到物理地址虽然有点复杂,但已经成了比较机械的任务。
函数和宏
线性地址字段:简化页表处理
PAGE_SHIFT 12 offset 字段的位数
PAGE_MASK 0xfffff000
PMD_SHIFT 页中间目录 22 if PAE disable or 21 if PAE enable
PMD_SIZE
PMD_MASK
PUD_SHIFT 页上级目录
PUD_SIZE
PUD_MASK
PGDIR_SHIFT 页全局目录
PTRS_PER_PTE PTRS_PER_PMD PTRS_PER_PUD PTRS_PER_PGD
分别是页表 页中间目录, 页上层目录, 页全局目录表项的个数