2012年(3)
分类: LINUX
2012-03-03 16:34:41
Linux操作系统分为几个模块,mm(内存管理),SCHED(进程调度),IPC(进程间通信),VFS(虚拟文件系统),NET(网络接口)。可以这样理解,用户需要使用硬件资源,那么资源宽泛点讲就是需要就是内存了,这个时候系统就需要内存管理;那又是谁在用这个内存呢,当然是进程了,不可能系统中只有一个进程,于是需要进程调度;多个进程下就涉及了进程间通信了;用户又不想接触到进程的概念,则上层封装vfs;计算机需要进行网络通信,系统就需要提供网络接口。
Linux启动流程:BIOS到KERNEL
1.MBR(MAST BOOT RECORD)à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
/etc/rc.d/rc$RUNLEVEL
/etc/rc.d/rc.local
/sbin/mingetty(等待用户登录)
进程调度
进程调度时机:a.用户进程自愿放弃cpu,如执行sleep()
b.系统调用中,需要等待时,直接调用schedule()进行调度
c.系统调用、中断或异常处理完成后,返回到用户空间前,若当前进程的pcb中的need_resched=1,则发生调度。//从内核态到用户态时会判断need_resched?=1
调度策略:动态优先级