linux 多任务浅析(二)

在一中我们说到了多任务即不同进程都有自己的独立的代码段,数据段,堆栈段。看似利用这个原理能将多任务隔离,但是他们各个段的起始地址又都是0,这就是很无语了,不过没关系,分页的时候会接着讲。这篇文章说一下多任务的切换。

x86体系从硬件上支持任务间的切换,也就说实际上linux同一时间只是在运行一个任务,但是由于他可以在很短的时间在不同的任务间来回切换执行,我们感觉上他是多个任务一起执行的。既然要在任务间来回切换那么势必就要记录每一个进程被切换时的状态,以便切换回来的时候恢复。所有每一个进程都有属于自己的一个记录进程状态的段TSS(taskstate segment)。

既然有了段那么就有段起始地址和段大小等的问题,好吧,自然而然的段描述符(tssd)该出场了,既然段描述符都出来了那么总需要有个放段描述符的地方吧,大名鼎鼎的GDT就出来了。这就回到了之前博文提到的原理了。但是wait这里的tss只是给出了少数的任务状态,还有一大部分任务状态被记录到了tssd(任务状态描述符)里面,tssd中有一个类型为thread_struct的thread字段,专门存放这些信息。

这样硬件切换进程的时候只需要把现在进程的状态保持,再把切换到的进程状态拿回来就可以了。状态你可以理解为各个寄存器里面的值。

参考:

http://oss.org.cn/kernel-book/ch05/5.4.1.htm

http://guojing.me/linux-kernel-architecture/posts/process-switch/

时间: 2024-12-11 14:02:25

linux 多任务浅析(二)的相关文章

linux 多任务浅析(三)

前两篇已经说过了多任务的切换原理,留有一个问题,就是linux跳过了分段,逻辑地址总是等于线性地址那么是如何对进程进行隔离的? 再说这个之前有几个概念 1.物理内存--你可以直接理解为你的内存条. 2.虚拟内存--假设你的电脑是32位的那么他的寻址空间为4G,但假设你的内存只有2G,如果有的程序分配到了超出2G的数据段怎么办?实际上x86体系会使用虚拟内存技术,他会将系统最用不到的内存数据读出来放在外设比如磁盘中,然后把你这个超出的内容再放入内存,你看似是递增的但实际上他不是,他是利用的其他的空

一步步学习Linux多任务编程(陆续更新)

系统调用 01.什么是系统调用? 02.Linux系统调用之I/O操作(文件操作) 03.文件描述符的复制:dup(), dup2() 多进程实现多任务 04.进程的介绍 05.Linux可执行文件结构与进程结构 06.多进程实现多任务(一):fork() 07.多进程实现多任务(二):vfork() 08.进程的控制:结束进程.等待进程结束 09.Linux特殊进程之僵尸进程 10.Linux特殊进程之孤儿进程 11.Linux特殊进程之守护进程 12.进程替换:exec函数族 进程间通信 1

一步步学习Linux多任务编程

系统调用 01.什么是系统调用? 02.Linux系统调用之I/O操作(文件操作) 03.文件描述符的复制:dup(), dup2() 多进程实现多任务 04.进程的介绍 05.Linux可执行文件结构与进程结构 06.多进程实现多任务(一):fork() 07.多进程实现多任务(二):vfork() 08.进程的控制:结束进程.等待进程结束 09.Linux特殊进程之僵尸进程 10.Linux特殊进程之孤儿进程 11.Linux特殊进程之守护进程 12.进程替换:exec函数族 进程间通信 1

Linux 进程调度浅析

概述 操作系统要实现多进程,进程调度必不可少.有人说,进程调度是操作系统中最为重要的一个部分.我觉得这种说法说得太绝对了一点,就像很多人动辄就说"某某函数比某某函数效率高XX倍"一样,脱离了实际环境,这些结论是比较片面的. 而进程调度究竟有多重要呢? 首先,我们需要明确一点:进程调度是对 TASK_RUNNING 状态的进程进行调度.如果进程不可执行(正在睡眠或其他),那么它跟进程调度没多大关系.所以,如果你的系统负载非常低,盼星星盼月亮才出现一个可执行状态的进程.那么进程调度也就不会

Linux系统管理(二)(网络服务)

点击下载:Linux系统管理(二)(网络服务)

Linux题目(二)

有重复内容,但肯定是重点 Linux面试((二) 一.Linux操作系统知识 1.常见的Linux发行版本都有什么?你最擅长哪一个?它的官网网站是什么?说明你擅长哪一块? 答:RHEL.CentOS.乌班图.红旗.debian等.我是从centos6.6打基础的,www.centos.org.(7月4号我去面试,面试官问我:"你对Linux内核哪部分最熟悉?",我一时懵逼答的进程管理.我特么哪块都不擅长啊!下次再被问到说iptables) ##类Unix有:FreeBSD .HP-UX

手把手带你自制Linux系统之二 简易Linux制作

手把手带你自制Linux系统之二 简易Linux制作 本文利用CentOS5.5自带内核制作一个Mini Linux. 打开准备工作中创建的CentOS,为另一个虚拟机MiniLinux添加一个最小Linux所需要的文件. 1. 创建分区 为准备好的磁盘创建两个主分区,大小分别为20M和512M. 使用fdisk命令创建分区详细过程: fdisk /dev/hda 创建第一个20M分区依次输入: n --> p --> 1 --> <Enter> --> +20M 这几

移动硬盘linux安装之二

安装好Linux,我给自己列了一系列需要安装的程序如下: synergy(电脑之间共享键鼠的工具) subersion(svn,大家都知道的,有些自带安装) fuse+ntfs-3g(使Linux能够读写ntfs分区) rar for linux 最新版firefox ieee80211+ipw2200(无线驱动) 下面是开发用 jdk+eclipse+tomcat mysql+apache+php+phpmyadmin ice+memcachce 娱乐用 mplayer 移动硬盘linux安装

Linux搭建DNS二 多域名解析

Linux搭建DNS二 多域名解析继续上一篇文章svr5 服务端 Centtos6 192.168.4.5pc205 客户端 Centos6 192.168.4.405域名hellc.cnhellc.com.cn---------------------------------------- 添加hellc.cn区域 (在配置文件追加) [[email protected] ~]# vim /etc/named.conf options {        directory   "/var/na