在一中我们说到了多任务即不同进程都有自己的独立的代码段,数据段,堆栈段。看似利用这个原理能将多任务隔离,但是他们各个段的起始地址又都是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/

转载于:https://www.cnblogs.com/SimpleISP/p/5280404.html

linux 多任务浅析(二)相关推荐

  1. linux进程调度浅析

    linux进程调度浅析 操作系统要实现多进程,进程调度必不可少. 有人说,进程调度是操作系统中最为重要的一个部分.我觉得这种说法说得太绝对了一点,就像很多人动辄就说"某某函数比某某函数效率高 ...

  2. 【Linux系统编程】Linux 进程调度浅析

    概述 操作系统要实现多进程,进程调度必不可少.有人说,进程调度是操作系统中最为重要的一个部分.我觉得这种说法说得太绝对了一点,就像很多人动辄就说"某某函数比某某函数效率高XX倍"一 ...

  3. docker CE on Linux示例浅析(四)swam群集配置

    概述 github项目地址:https://github.com/superwujc 尊重原创,欢迎转载,注明出处:https://my.oschina.net/superwjc/blog/30534 ...

  4. Linux 读书笔记 二

    一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 若不小心登出后,直接刷新页面即可 2. 环境使用 完成实验后可以点击桌面上方的"实验截图 ...

  5. Linux多任务编程之五:exit()和_exit()函数(转)

    来源:CSDN  作者:王文松   转自:Linux公社 ----------------------------------------------------------------------- ...

  6. Linux学习(二)--远程登录Linux系统

    文章目录 Linux学习--远程登录Linux系统 一.明白为什么我们需要远程登入Linux系统? 二 .Xshell的介绍 三.Xftp5介绍 Linux学习–远程登录Linux系统 一.明白为什么 ...

  7. linux网络编程二:基础socket, bind, listen, accept, connect

    linux网络编程二:基础socket, bind, listen, accept, connect 1. 创建socket #include <sys/types.h>     #inc ...

  8. Core Linux折腾(二)

    为什么80%的码农都做不了架构师?>>>    目录 Core Linux折腾(一)[一] Core Linux折腾(一)[二] Core Linux折腾(二) Core Linux ...

  9. Linux 进阶笔记(二)

    这几篇博文主要记录博主的Linux 学习之路,用作以后回顾和参考.大家可以选择略过也可以作参考. (一)Linux 初步笔记 (二)Linux 进阶笔记(一) (三)Linux 进阶笔记(二) (四) ...

最新文章

  1. 人脸真伪验证与识别:ICCV2019论文解析
  2. 保存ip地址和计算机名称,批量设置IP地址和计算机名
  3. XGBoost的理解
  4. VTK:Filtering之IterativeClosestPointsTransform
  5. 6.关于QT中的内存管理,动态的制作,动态库的调用,静态库的制作
  6. 驰骋工作流程引擎,ccflow,如何把子线程的数据汇总到合流节点表单中去?
  7. java的地位和优势,Java语言之所以能持续占领霸主地位 这些优势功不可没
  8. 阿里重磅开源Blink:为什么我们等了这么久?
  9. C++ 模板元编程简介
  10. Rest风格中关于JPA使用懒加载的坑
  11. MongoDB安装、配置与示例
  12. ShardedJedis的使用
  13. 2022年计算机二级C语言程序设计模拟练习题及答案
  14. Windows必备程序 | CleanMyPC安装教程
  15. android上下居中,android Spinner:在spinner中垂直居中文本
  16. 博客网页设计制作 简单静态HTML网页作品 DIV CSS个人网页作业成品 dreamweaver学生个人博客网站模板
  17. intro是啥意思_Intro是什么意思?
  18. 微信好友数目限制突破5000人? 这点钉钉、BTchat链语早就做到了
  19. 计算机网络 直连网,计算机网络基础及局域网构建 静态路由和直连路由 静态路由和直连路由.doc...
  20. expect RPAREN, actual LPAREN pos 31, line 1, column 14, token LPAREN

热门文章

  1. iPayLinks与Ueeshop达成战略合作 助力中国品牌拓业全球
  2. 《数据挖掘导论》Pangaea-Ning Tan 读书笔记 ----第五章 分类其他技术
  3. docker常用命令-docker history
  4. Android 仿网易一元夺宝客户端下拉加载动画实现(一)
  5. m5310采用芯片 中移物联_时延、吞吐量及功耗......NB-IoT主流芯片哪家强?
  6. 一组免费的简约风格表情图标 – Simple Smileys
  7. ci mysql操作_CI中的数据库操作
  8. 乌云漏洞平台:一枚孢子如何生长成群落
  9. Linux新建硬盘分区
  10. 对称振子天线的matlab仿真,基于Matlab的对称振子天线分析