易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux 0.11版 进程调度文本解说

    0.11核中进程的调度主要由四个部分数组成:调度初始化、调度、睡眠、唤醒。
     一、调度初始化:sched_init()
     我们知道在内核初始化(main)过程中,要将任务0转换到用户态下执行,也就是建立Linux中的第一个用户程序。既然任务0之前是在内核态下执行的,所以用的是系统的ldt、和tss,要在用户态下执行,就要使用用户态下的ldt、tss,那么,调度初始化的其中一个任务就是建立任务0的ldt和gdt。下面说一下sched_init()的具体工作过程:
     1)在gdt中设置ldt、gdt:ldt和gdt的定义在sched.h中。
     2)将eflags中的NT置位:记得在前面关于任务切换的说明中,我提到在main的中sched_init()之后,要调用move_to_user_mode()实现核心态到用户态的转换,而在move_to_user_mode()中,最后调用了iret,如果将NT为0,就不会引起进程的切换了。
     3)加载tss和ldt:手动加载仅这一次,以后都是通过任务的切换CPU自动加载的。在这里,因为是第一个用户任务,所以需要手动设置。
     4)初始化8253定时器。
     5)在IDT中设置时钟的中断门和系统调用的中断门。
二、调度:schedule()
       这个函数的主要工作就是从所有处在就绪状态的进程中选择下一个要运行的进程。具体工作过程是这样的:它首先检查在处在可中断睡眠状态下的进程是否除了阻塞信号以外别的信号,如果存在,则将它置成就绪状态。然后循环检查任务数组中的所有处在就绪状态的任务,挑选出剩余执行时间值最大的一个任务,利用switch_to()函数切换到该任务。如果发现所有就绪进程的时间片都是0,则根据任务的优先级,重新计算每个任务的时间片,在重新执行循环检查所有就绪任务的执行剩余时间。
其中,这个函数的核心之一就是switch_to()函数,它能实现任务的切换,它的定义在sched.h中,主要原理就是利用如果ljmp的操作数是任务门描述符就会引起任务的切换。
     三、睡眠sleep_on()、interruptible_sleep_on()
      在接收这个函数的工作原理之前,先了解一个数据结构:等待队列。等待队列其
其实就是一个进程指针链表,所有由于等待同一个资源的睡眠进程组成一个等待队列。这个链表的连接并不是通常意义上


相关文档:

Linux安装JDK详细步骤2

Linux安装JDK步骤1. 先从网上下载jdk(jdk-1_5_0_02-linux-i586.rpm)
,推荐SUN的官方网站www.sun.com,下载后放在/home目录中,当然其它地方也行。
进入安装目录
#cd /home
#cp
jdk-1_5_0_02-linux-i586.rpm /usr/local
#cd /usr/local
给所有用户添加可执行的
权限
#chmod +x jdk-1_5_0_02-linux-i586.rpm.bin ......

每日必看的linux网站和博客收集

http://www.linuxjournal.com/
Linux Kernel Newbies
一方适合内核开发初级黑客的乐土——该网站几乎能够满足所有磨刀霍霍向内核的新手的需求。
http://kernelnewbies.org/
http://vger.kernel.org/
了解如何使用linux内核列表
http://www.tux.org/lkml/
Linux
新闻周刊,它有一个专区报道有关内核的重要 ......

linux 命令集锦

最近在Linux装oracle 在网上搜了点资料和大家分享
linux下命令和文件及目录名都分大小写
//查看历史数据
history
history |grep mount
按"上下键"选以前敲过的命令
//拷贝文件
cp /usr/local/tomcat4/temp/func.class /usr/local/tomcat4/webapps/photoblog/WEB-INF/classes/framework/utils/
cp -Rf /photodataold ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号