贾瑗 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

一、操作系统是如何工作的

进程:是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。进程需要执行的时候操作系统对他分配相应的资源的。这里的资源指的就是计算机的硬件和系统资源。

CPU只有一个但计算机会有很多进程,所以系统需要轮流给进程分配CPU这个硬件资源,这就是的时间片轮转调度。

操作系统的两把剑是中断上下文和进程上下文的切换。中断是多道程序操作系统的基点,没有中断机制程序只能从头到尾直到运行结束才有可能执行其他进程

进程在进行切换的时候,需要把当前进程的运行状态保存起来,等到下次执行的时候就可以知道是从哪开始执行的。由CPU和内核代码共同实现保护现场和恢复现场

二、实验代码分析

mykernel包括了三个文件,mypcb.h、mymain.c、myinterrupt.c

mypcb

两个结构体

Thread结构体:存放了两个用于存放地址的变量,一个堆栈指针,一个指令指针
PCB结构体:用于存放进程的相关信息。标志ID,进程状态,进程堆栈大小,一个线程,一个任务入口地址,一个指向下一个PCB的指针。

mymain

myinterrupt

三、实验截图

将缺少的代码补全

四、实验总结

进程切换

(1)决定是能否进行上下文切换。时间片用完后进行调度;
(2)保存当前执行进程的上下文。恢复的时候可以接着执行;
(3)使用进程调度算法,选择一处于就绪状态的进程。
(4)恢复或装配所选进程的上下文,将CPU控制权交到所选进程手中。

进程切换的核心就是要对所有进程恢复当前状态的系统资源进行保存。了解了这一点,就可以理解了操作系统是如何工作的。之前学过操作系统这门课,很多东西听起来也不是特别陌生。

Linux内核分析作业二的更多相关文章

  1. Linux内核分析作业二—操作系统是如何工作的

    一.实验:简单的时间片轮转多道程序内核代码运行与分析 my_start_kernel之前都是硬件初始化,它是操作系统的执行入口,每循环100000次就进行一次打印. 执行更加简单,每次时钟中断时都会调 ...

  2. Linux内核分析(二)----内核模块简介|简单内核模块实现

    原文:Linux内核分析(二)----内核模块简介|简单内核模块实现 Linux内核分析(二) 昨天我们开始了内核的分析,网上有很多人是用用源码直接分析,这样造成的问题是,大家觉得很枯燥很难理解,从某 ...

  3. Linux内核分析作业第四周

    系统调用的三个层次 一.用户态.内核态和中断 用户通过库函数与系统调用联系起来. 1.内核态 在高的执行级别下,代码可以执行特权指令,访问任意的物理地址,这时的CPU就对应内核态 2.用户态: 在低级 ...

  4. Linux内核分析作业八

    进程的切换和系统的一般执行过程 贾瑗 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029 ...

  5. “Linux内核分析”实验二报告

    张文俊 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.第二周学习内 ...

  6. Linux内核分析作业第二周

    操作系统是如何工作的 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.函数调用堆栈 1.计算机工作三 ...

  7. Linux内核分析 笔记二 操作系统是如何工作的 ——by王玥

    一.知识要点 1.计算机是如何工作的?(总结)——三个法宝 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算 ...

  8. linux内核分析作业8:理解进程调度时机跟踪分析进程调度与进程切换的过程

    1. 实验目的 选择一个系统调用(13号系统调用time除外),系统调用列表,使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 分析汇编代码调用系统调用的工作过程,特别是参数的传递的方 ...

  9. Linux内核分析作业7:Linux内核如何装载和启动一个可执行程序

            1.可执行文件的格式 在 Linux 平台下主要有以下三种可执行文件格式: 1.a.out(assembler and link editor output 汇编器和链接编辑器的输出) ...

随机推荐

  1. webpack分离css单独打包

    这篇文章过期了,webpack4.x已经不这么用了,最新的可以看这个地址webpack实战场景系列 原文地址:http://www.izhongxia.com/posts/44724.html CHA ...

  2. github与本地电脑关联配置

    参考文章:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137438585 ...

  3. 细数垃圾邮箱客户端 Live Mail 的BUG

    以前用XP系统,里面自带的有outlook,使用中还行,不过bug也不少,常见的如 1.查找,邮件多了后,常常查找不到: 2.有时收件箱什么的突然空白,或部分邮件不见了(2G大小限制,超过了就不能做移 ...

  4. Asp.Net WebApi服务的创建

    Web API一种REST架构风格的Web服务.所谓的REST架构与技术无关,而是面向资源的一种软件架构设计. WCF自3.5之后也提供了对REST风格的支持,但和WebAPI来比较显得较为笨重,We ...

  5. JSONP方法解决跨域请求

    Ajax跨域请求的问题 跨域:跨域名, 一个域名下的文件去请求了和他不一样的域名下的资源文件(注意是请求文件,而不是数据接口),那么就会产生跨域请求,下面来写一个ajax来跨域请求的例子 <!D ...

  6. Spring-IOC XML 配置多个相同 ID 的 bean 加载分析

    我们现在仍以 xml 中配置 bean 的方式来 使用 Spring ,不考虑注解和扫包 配置相同id 的bean 定义一个 bean 类 TransactionManager /** * @auth ...

  7. 【转】系统去掉 Android 4.4.2 的StatusBar和NavigationBar

    系统Hide Status Bar frameworks/base/core/res/res/values/dimens.xml 把  <dimen name="status_bar_ ...

  8. 609E- Minimum spanning tree for each edge

    Connected undirected weighted graph without self-loops and multiple edges is given. Graph contains n ...

  9. 创建一个目录的软连接ln -s和打印当前目录pwd的一个知识点

    创建一个目录的软连接,比如我在家目录下创建一个/data/www/的软连接,如下 # cd ~ # ln -s /data/www hehe       #这里一定要注意顺序哈哈 然后当我进入hehe ...

  10. odoo之可选择多个内容显示问题

    <field name="partner_id" widget="many2many_tags" options="{'no_create': ...