原创作品转载请注明出处

原创作者    ShenYue(沈乐)

实验日期    20160306

实验名称    完成一个简单的时间片轮转多道程序内核代码

实验来源   《Linux内核分析》MOOC课程 http://mooc.study.163.com/course/USTC-1000029000

操作系统单程序的函数调用使用的是堆栈机制, 通过ebp esp eip指针的进栈出栈来切换不同的栈帧(执行上下文), 然而单CPU只能有唯一的执行流,多进程环境中不可能让单一进程”独占”, 如何实现多进程并行工作,在其他进程使用CPU的时候可以”抢占”执行资源?

答案就是interrupt(中断机制).

下面是一个关于时间片轮转的操作系统内核实验,由于Linux内核代码本身提供了预留的接口用于开发者定义自己的系统启动函数和时钟中断处理函数,所以简单地实际这样的函数来进行中断处理动作就可以模拟周期性地时间中断”抢占”系统启动进程的过程.

登录实验楼的环境, 其中已经事先安装好了GCC的运行环境,QEMU硬件模拟环境和Linux内核编译源码.

定义my_start_kernel, 周期性地在内核态打印my_start_kernel here的字符串.

定义timer interrupt的回调函数my_timer_handler(), 当时钟中断发生时候,L inux内核就会调用该函数同样是打印my_timer_handler here的字符串.

然后就是执行修改过的内核镜像文件

$qemu -kernel  arch/x86/boot/bzImage

可以看到来回切换地打印my_start_kernel here和my_timer_handler here,实际执行过程就是执行进程my_start_kernel 的时候周期性地接收到时钟信号,接收到需要程序被打断(interrupt)的请求后,内核会把当前执行的进程的ebp esp压栈进入内核堆栈(保存现场), 同时eip指向中断处理程序入口, 调用自定义的回调函数my_timer_handler执行,执行结束后回复内核堆栈中保存的ebp esp指针(恢复现场)

转载于:https://my.oschina.net/alphajay/blog/631863

单CPU环境中如何实现多进程并行工作?相关推荐

  1. Exchange 2003 在多域环境中的部署

    相信大多数Exchange管理员对单域环境中的部署已经非常熟悉,包括单域单台或者多台Exchange服务器的部署,网络中也有很多此类的教程.但是关于如何在多域环境中部署Exchange的文章非常少,在 ...

  2. 在成长中遇到的挫折事件对你的影响_多种语言环境中成长的宝宝,会影响说话早晚?其实没有想象的复杂...

    关于用多种语言抚养孩子的案例比比皆是,但并不是所有的父母都鼓励这样做,他们被告知这会导致孩子混乱和语言延迟,使他们错过机会之窗. 以下是最常见的案例,以及把孩子培养成双语者背后的真实故事. 误解一.与 ...

  3. dst matlab,DSTcode DST跟踪算法MATLAB代码,复杂环境中仿多目标 实现的单 Other systems 其他 272万源代码下载- www.pudn.com...

    文件名称: DSTcode下载  收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 82 KB 上传时间: 2017-03-17 下载次数: 0 提 供 者: Mar ...

  4. android 表单 禁止编辑器,百度编辑器ueditor(v1.3.6)net环境中详细配置教程附bug解决方法...

    1.下载UEditor,当前最新版本是1.3.6.这里下载的.net版本,选择UTF-8.下载地址:http://ueditor.baidu.com/website/download.html 注意: ...

  5. 关于单CPU,多CPU上的原子操作

    所谓原子操作,就是"不可中断的一个或一系列操作" . 硬件级的原子操作: 在单处理器系统(UniProcessor)中,能够在单条指令中完成的操作都可以认为是" 原子操作 ...

  6. Dubbo Mesh 在闲鱼生产环境中的落地实践

    本文作者至简曾在 2018 QCon 上海站以<Service Mesh 的本质.价值和应用探索>为题做了一次分享,其中谈到了 Dubbo Mesh 的整体发展思路是"借力开源. ...

  7. DPDK在Linux用户级执行环境中执行EAL

    目录 在Linux用户级执行环境中进行EAL 初始化和核心启动 关机和清理 多进程支持 内存映射发现和内存保留 支持外部分配的内存 每个核心和共享变量 日志 CPU功能识别 用户空间中断事件 黑名单 ...

  8. php中如何实现多进程

    php中如何实现多进程 一.总结 一句话总结: php多进程需要pcntl,posix扩展支持 可以通过 php - m 查看,没安装的话需要重新编译php,加上参数--enable-pcntl,po ...

  9. unix环境中以下列出的oracle,浙江中医药大学2012研究生计算机复习题

    12按对应的ASCII码值来比较_BC_____. A. "B比"a"大 B. "f"比"q"大 C. "0" ...

  10. 在Unity环境中使用强化学习训练Donkey Car(转译)

    在Unity环境中使用强化学习训练Donkey Car 1.Introduction 简介 2. Train Donkey Car with Reinforcement Learning 使用强化学习 ...

最新文章

  1. retinanet50预训练权重_论文导读|基于注意力机制对齐增强预训练语言模型
  2. MDNN:一种用于药物-药物反应预测的多模态深度神经网络
  3. Apress水果大餐——移动开发
  4. 前端(jQuery)(5)-- jQuery AJAX异步访问和加载片段
  5. ASP.NET 2.0 之 Master Page 学习笔记 --zt
  6. DataFrame 删除与增减行列
  7. 正则表达式 (re包)——python(快餐)
  8. vue生命周期(列表详解)
  9. 陈景润:激励青年勇攀科学高峰的典范
  10. 没有报表和数据分析,银行数据仓库只能是一盘散沙
  11. 看完《复联4》想剧透怎么办?网店开始卖《复联4》讨论群了...
  12. python 执行js_Python爬虫之记录一次下载验证码的尝试
  13. 2020年华工计算机应用基础随堂作业,《计算机应用基础》随堂练习-2020年华工网络教育.docx...
  14. Sentinel 网关流量控制之Spring Cloud Gateway实战
  15. 【图像隐写】基于matlab LSB算法图像隐写提取【含Matlab源码 366期】
  16. 数据库 表设计案例+经验 [vaynexiao]
  17. java udp发送速率_项目总结22:Java UDP Socket数据的发送和接收
  18. 主流PCB画图软件的对比区别(AD、Pads、Allegro)
  19. python 重命名文件出现乱码_python处理文件名乱码
  20. 问题 J: LZY订单查询

热门文章

  1. 判断Linux/Unix为32位或64位
  2. linux socket tcp程序,Linux下Socket TCP的简单例子
  3. Layer 提示框tips使用(批量提示)
  4. Shell脚本字符串截取方法总结
  5. Layer 引入自定义模块
  6. java数组清空能释放jvm内存嘛_一文带你深入理解JVM
  7. c语言编程伤心代码,C语言恶作剧代码:慎用,被打了不负责
  8. maven pom.xml中设置java编译参数
  9. 文字处理:标点符号有哪些,场景,参考GB-T 15834-2011《标点符号用法》
  10. Windows下,BAT文件中使用XCopy复制整个目录