by pascal4123(http://pascal4123.cublog.cn)
init内核初始化主目录只有一个源文件main.c, 执行内核的初始化工作,然后从核心态转移到用户态下创建新进程,并在控制台上运行shell.程序根据物理内存的多少对缓冲区内存进行分配,之后就进行所有硬件的初始化工作,包括人工创建第一个任务task 0, 并设置中断允许标志.在执行从核心态到用户态的转移后,系统第一次调用fork(),创建1个用于运行init()的进程.在该子进程中,系统将进行控制台环境设置,并且再生成一个子进程运行shell
mm内存管理目录
包括2个代码文件.实现了进程地址到进程逻辑地址以及线形地址到主内存区中物理内存地址的映射
page.s 内存页面异常中断int 14 处理.包括缺页异常,以及访问非法地址.
memory.c 对内存初始化.
内核系统与用户程序的关系内核提供了二方面的接口:
系统调用,也即中断调用int 0x80,是内核与外界接口的最高层.每个系统调用都有1个序号(在include/linux/unistd.h中定义),并以宏的形式实现.系统调用接口主要供系统软件直接使用或用于库函数的实现.考虑到移植性,用户程序不要直接调用系统调用.
再就是内核库函数,这是c函数库libc的组成部分.
linux系统中,一个进程运行时可以在内核态(kernel mode)或用户态(usr mode),内核栈和用户栈是分开的.
用户栈用于进程在用户态下临时保存参数,局部变量,内核栈则含有内核程序执行函数时的信息.
内核程序通过进程表对进程进行管理,进程表是一个task结构.
阅读(432) | 评论(0) | 转发(0) |