1 / 9

Linux 内核结构与进程管理

Linux 内核结构与进程管理. Linux 系统结构. Linux kernel: 开放源代码的 linux 操作系统内核,目前版本为 2.6. Linux 内核组成. 1. 进程调度程序( S C H E D )负责控制进程访问 C P U 。保证进程能够公平地访问 C P U ,同时保证内核可以准时执行一些必需的硬件操作。 2. 内核管理程序( M M )使多个进程可以安全地共享机器的主存系统,并支持虚拟内存。

yadid
Download Presentation

Linux 内核结构与进程管理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Linux 内核结构与进程管理 • Linux系统结构 Linux kernel: 开放源代码的linux操作系统内核,目前版本为2.6

  2. Linux内核组成 1. 进程调度程序( S C H E D)负责控制进程访问C P U。保证进程能够公平地访问C P U,同时保证内核可以准时执行一些必需的硬件操作。 2. 内核管理程序( M M)使多个进程可以安全地共享机器的主存系统,并支持虚拟内存。 3. 虚拟文件系统( V F S)。通过提供一个所有设备的公共文件接口, V F S抽象了不同硬件设备的细节。此外, V F S支持与其他操作系统兼容的不同的文件系统格式。 4. 网络接口( N E T)提供对许多建网标准和网络硬件的访问。 5. 进程间通信( I P C)子系统为进程与进程之间的通信提供了一些机制。 这些子系统虽然实现的功能相对独立,但存在着较强的依赖性(调用依赖模块中相应的函数),所以说linux内核是单块结构(monolithic)的,而windows体系结构是微内核(microkernel)的。

  3. Linux启动流程 • 从BIOS到KERNEL • MBR->KERNEL->KERNEL自解压->内核初始化->内核启动(start_kernel函数,在linux内核源代码树的/usr/src/linux/init/main.c中) • 2. 内核启动:创建1#进程并执行,由它创建若干内核线程(kernel thread),然后装入并执行程序/sbin/init(变成一个用户进程)。此后,init根据/etc/inittab配置文件来执行相应的脚本进行系统初始化,如设置键盘、字体,装载模块,设置网络等 • 对于Redhat来说,执行的顺序为:/etc/rc.d/rc.sysinit#由init执行的第一个脚本/etc/rc.d/rc$RUNLEVEL#$RUNLEVEL为缺省的运行模式 • /etc/rc.d/rc.local #运行模式2、3、5时会运行的脚本 • /sbin/mingetty(或getty)#等待用户登录 • /etc/inittab中指定了系统的运行级别(RUNLEVEL),init根据运行级别启动相关的服务(一些后台进程),实现不同的功能。 • RUNLEVEL:0-6 • 0:halt, 1:单用户,2:多用户,3:多用户并启动NFS服务 • 4:保留,5:运行xdm(X window)以图形界面方式登录 • 6:reboot

  4. Linux中用户登陆流程

  5. linux进程的四要素 • 程序 • PCB • 地址空间 • 系统堆栈空间 PCB:进程创建时内核为其分配的一个核心数据结构,进程自身不能直接存取。 系统堆栈空间:进程运行在核心态时使用的堆栈,和PCB连在一起,共8KB,其中PCB约占1000字节,系统堆栈空间约占7200字节。 2.2 内核中linux进程个数有最大值限制(4092)。但2.4以后,系统中的进程个数受限于系统的物理内存数,即限定所有进程的PCB及系统堆栈(8K)占用的空间≤1/2的物理内存总和。例64M内存:进程数≤64M/2/8K=4K

  6. PCB中的重要信息 • 身份信息:pid,uid,gid,euid,egid等; • 状态信息:running, interruptible, non-interruptible, stopped, zombie • 调度信息:policy, priority, rt_priorty, need_resched • policy即进程的类别,分SCHED_FIFO, SCHED_RR, SCHED_OTHER三种,前两种为实时进程,后一种为非实时进程 • IPC信息:如定义对某些信号的处理等 • 家族信息:父进程、兄弟进程、子进程信息 • 时钟和定时信息 • 文件系统 • 存储管理

  7. 进程的创建 • 进程创建:fork , clone, vfork • 父子进程共享资源的形式 • a.不共享(fork时缺省) • b.部分共享 • c.完全共享(线程)

  8. fork实例 #include <stdio.h>int myvar=0;void main(){ int pid; pid = fork(); //system call if (pid < 0 ) { //error occurred printf(“fork failed.”); exit(-1); //system call } else if (pid == 0 ) { //child process printf(“child process executing…\n”); myvar = 1; } else { //parent process wait(); //system call, wait for children completion printf(“child complete.”); myvar ++; printf(“father,myvar=%d”,myvar); exit(0); }}

  9. 硬件时钟 (晶振,CMOS电路) 中断控制器8259 CPU 定时器 8253 进程调度 • 调度时机 a. 用户进程自愿放弃CPU,如执行sleep()系统调用; b.系统调用中,需要等待时,直接调用schedule()进行调度; c.系统调用、中断或异常处理完成后,返回到用户空间前,若当前进程的PCB中的need_resched = 1,则发生调度; • 调度策略:基于进程的权值(weight,即动态优先级) 实时进程:weight = 1000+rt_priority (>1000) 分时进程: weight = counter + 20 – nice (<1000) 其中:rt_priority:是实时进程的优先级 counter:进程还剩余的时间片值 nice:进程优先级的调整值 (均在进程的PCB中标识)

More Related