摘要:
1 什么是TSS TSS 全称task state segment,是指在操作系统进程管理的过程中,任务(进程)切换时的任务现场信息。 2 TSS工作细节 TSS在任务切换过程中起着重要作用,通过它实现任务的挂起和恢复。所谓任务切换是指,挂起当前正在执行的任务,恢复或启动另一任务的执行。在任务切换过程中,首先,处理器中各寄存器的当前值被自动保存到TR(任务寄存器)所指定的TSS中;然后,下一任务的TSS的选择子被装入TR;最后,从TR所指定的TSS中取出各寄存器的值送到处理器的各寄存器中。由此可见,通过在TSS中保存任务现场各寄存器状态的完整映象,实现任务的切换。 3 TSS的格式... 阅读全文
摘要:
在gcc中,可以使用 __asm__ 进行汇编语言的内嵌。 __volatile__ 表明编译器不要优化代码,后面的指令保持原样。C语言关键字volatile表明某个变量的值在外部可能被改变,因此对这些变量的存取不能缓存到寄存器,每次使用都要重新存取。 阅读全文
摘要:
当Linux内核要寻找一个新的进程在CPU上运行时,必须只考虑处于可运行状态的进程,(即在TASK_RUNNING状态的进程),因为扫描整个进程链表是相当低效的,所以引入了可运行状态进程的双向循环链表,也叫运行队列(runqueue)。运行队列容纳了系统中所有可以运行的进程,它是一个双向循环队列该队列通过task_struct结构中的两个指针run_list链表来维持。队列的标志有两个:一个是“空进程”idle_task、一个是队列的长度。有两个特殊的进程永远在运行队列中待着:当前进程和空进程。前面我们讨论过,当前进程就是由cureent指针所指向的进程,也就是当前运行着的进 程,但是请注意, 阅读全文
摘要:
在研究进程fork()的时候,这个调用了do_fork(),其中do_fork()又涉及到进程的pid分配,这个东西的源代码有许多个版本,而且各自都不是一样的。昨天晚上研究了一晚上,今天从下午研究到现在,总算把内核中pid位图算法有一个整体的把握了。明天早上继续完成这篇博客,现在小小的庆祝一下,明天完成。 首先我们先看一个程序,这个程序是我从网上找的,这个程序的主要部分也是内核中的代码,下面我们就来分析一下这个程序。注:原程序有许多bug虫,下面的程序是我修改正确之后的程序,也算是有一点自己的共享吧,另外,原程序没有解释,我的解释估计还算详细吧,不废话了,我们一起来分析一下程序吧。小知识:.. 阅读全文