贾瑗 + 原创作品转载请注明出处 + 《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. sublime设置node.js编译

    1. 首先需安装node环境并配置好环境变量,安装教程. 2. 然后在sublime中打开工具(Tools)→编译系统(Build System)→新编译系统(New Build System) 3. ...

  2. swiper.js 多图片页面的懒加载lazyLoading

    swiper.js官网:http://www.swiper.com.cn/api/Images/2015/0308/213.html 设为true开启图片延迟加载,使preloadImages无效.需 ...

  3. swift的关联类型

    一.术语:指定类型 typealias:用于给关联类型指定类型: 通过类型推断给关联类型指定类型太过烧脑: 二.类型指定 1.具体类型实现协议后,直接指定:作为普通的泛型类型使用,指定类型即可: 2. ...

  4. Effective MySQL之SQL语句最优化——读书笔记之二

    第二章,基本的分析命令 本章简单介绍了如下几个基本的MySQL分析命令: EXPLAIN命令 生成QEP不是确定的 QEP不会绑定给一个SQL或者存储过程,而是在执行的时候根据实际情况生成 可以通过Q ...

  5. docker中使用的镜像加速器可以自己生成

    只要你到该网址https://cr.console.aliyun.com/cn-hangzhou/mirrors登录(我使用的是支付宝帐号),然后你如下图操作,就能够看见你的加速器地址了,只要你登录就 ...

  6. NFS及RPC讲解

    导读 NFS(Network File System)即网络文件系统,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网 ...

  7. MySQL数据类型字节长度

    1.字符串 char(n): n 字节长度 varchar(n): 如果是 utf8 编码, 则是 3 n + 2字节; 如果是 utf8mb4 编码, 则是 4 n + 2 字节. 2.数值类型: ...

  8. 微信小程序 bindcontroltap 绑定 没生效

    微信 bindcontroltap 绑定 没生效 多次查看官方文档,代码没有问题, 解决: windows下  显示设置中 缩放必须是100%,

  9. uC/OS-III 时钟节拍,时间管理,时间片调度

    uC/OS-III 时钟节拍,时间管理,时间片调度   时钟节拍 时钟节拍可谓是 uC/OS 操作系统的心脏,它若不跳动,整个系统都将会瘫痪. 时钟节拍就是操作系统的时基,操作系统要实现时间上的管理, ...

  10. odoo 之报date<form string=''product lc''> 错误

    原因是: </page> </notebook> </form> <div class="oe_chatter"> <fiel ...