此为个人学习笔记存档

week 2 操作系统是怎么工作的

一、计算机是如何工作的?——三个法宝

(一)三个法宝

1.存储程序计算机

所有计算机的基础性的逻辑框架。

2.函数调用堆栈

在低级语言中并不很重要,但是堆栈技术是高级语言可以运行的基础。

3.中断机制

有了中断后,就有了多道程序设计

每个程序有自己的执行流。

中断发生时,cpu把当前的eip等压入内核堆栈中,然后把eip指向中断处理程序的入口。

(二)深入理解函数调用堆栈

1.堆栈

堆栈是c语言程序运行时必须的一个记录调用路径和参数的空间

  • 函数调用框架
  • 传递参数(32位x86)
  • 保存返回地址
  • 提供局部变量空间
  • ……

2.堆栈相关寄存器

esp 堆栈指针

ebp 基址指针(在c语言中用作记录当前函数调用基址)

3.堆栈操作

push 栈顶地址减少4个字节(32位)

pop 栈顶地址增加4个字节

4.其他关键寄存器

  1. 代码段寄存器cs

    cs:eip:总是指向下一条指令的地址。

    更改?

    • call:将当前cs:eip的值压入栈顶,cs:eip指向被调用函数的入口地址
    • ret:从栈顶弹出原来保存在这里的cs:eip的值,放入cs:eip中

5.函数的堆栈框架

  1. 建立被调用函数的堆栈框架

    在该函数的函数体前加:

    pushl %ebp

    movl %esp, %ebp

  2. 拆除被调用函数的堆栈框架

    在该函数的函数体后加:

    movl %ebp, %esp

    popl %ebp

    ret

(三)参数传递与局部变量

在例子中,参数传递?

z = p2(x,y);

pushl 0xfffffff8(%ebp)
pushl 0xfffffff4(%ebp) ;先把y压入栈,再把x压入栈。因为都存在栈里,所以可以变址寻址
call 804839b<p2>
add $0x8,%esp ;把之前压进来的取消掉
mov %eax,0xfffffffc(%ebp) ;赋给z

二、借助linux内核部分源代码模拟存储程序计算机工作模型及时钟中断

1.利用mykernel实验模拟计算机硬件平台

三、在mykernerl基础上构造一个简单的操作系统内核

(一)C语言中嵌入汇编代码的写法

注意事项:

  1. movl $0,%%eax\n\t中,第一个百分号是转义字符,第二个是%eax
  2. addl %1,%%eax\n\t中,%1是指下文中输出和输入的编号,编号从0开始。
  3. "c"(val1)表示用ecx寄存器存储val1的值。同理,"d"(val2)表示用edx寄存器存储val2的值。
  4. "=m"(val3)表示把val3的值写入内存变量。=只写,m指内存。
  5. 具体见修饰符。

(二)一个简单的操作系统内核源代码

操作系统的“两把剑”:

1.中断上下文,即中断处理程序。

2.进程上下文的切换

两个情况:

1.下一个进程next->state == 0 即正在执行时。

2.进程是一个新进程,还从未执行过。

20135202闫佳歆--week2 操作系统是如何工作的--学习笔记的更多相关文章

  1. 20135202闫佳歆--week6 进程的描述与创建--学习笔记

    此为个人学习笔记存档! week 6 进程的描述与创建 一.进程的描述 1.进程控制块task_struct 以下内容来自视频课件,存档在此. 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述 ...

  2. 20135202闫佳歆--week 8 课本第4章学习笔记

    第四章 进程调度 一.多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统. 多任务操作系统使多个进程处于堵塞或者睡眠状态,实际不被投入执行,这些任务尽管位于内存,但是并不处于可运行状态. ...

  3. 20135202闫佳歆--week2 一个简单的时间片轮转多道程序内核代码及分析

    一个简单的时间片轮转多道程序内核代码及分析 所用代码为课程配套git库中下载得到的. 一.进程的启动 /*出自mymain.c*/ /* start process 0 by task[0] */ p ...

  4. 20135202闫佳歆--week1 计算机是如何工作的

    计算机是如何工作的 这一周我学习了计算机工作的相关知识. 最基础的,就是冯诺依曼体系结构结构,它最核心的思想是存储程序计算机,要点是:数字计算机的数制采用二进制:计算机应该按照程序顺序执行. 除了思想 ...

  5. 20135202闫佳歆--week 7 Linux内核如何装载和启动一个可执行程序--实验及总结

    week 7 实验:Linux内核如何装载和启动一个可执行程序 1.环境搭建: rm menu -rf git clone https://github.com/megnning/menu.git c ...

  6. 20135202闫佳歆--week 9 期中总结

    期中总结 前半学期的主要学习内容是学习mooc课程<Linux内核分析>以及课本<Linux内核设计与实现>. 所涉及知识点总结如下: 1. Linux内核启动的过程--以Me ...

  7. 20135202闫佳歆--week3 跟踪分析Linux内核的启动过程--实验及总结

    实验三:跟踪分析Linux内核的启动过程 一.调试步骤如下: 使用gdb跟踪调试内核 qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd r ...

  8. 20135202闫佳歆--week6 分析Linux内核创建一个新进程的过程——实验及总结

    week 6 实验:分析Linux内核创建一个新进程的过程 1.使用gdb跟踪创建新进程的过程 准备工作: rm menu -rf git clone https://github.com/mengn ...

  9. 20135202闫佳歆--week3 构造一个简单的Linux系统MenuOs--学习笔记

    此为个人学习笔记存档 week 3 构造一个简单的Linux系统MenuOs 复习: 计算机有三个法宝:存储程序计算机,函数调用堆栈,中断 操作系统有两把剑: 1.中断上下文的切换,保存现场和恢复现场 ...

随机推荐

  1. Java多线程学习笔记之二缓存

    1.高速缓存 由来:处理器处理能力原因大于主内存(DRAM)访问速率,为了弥补这个差距,引入了高速缓存. 高速缓存是一种存取速率远比主内存大而容量远比主内存小的存储部件,每一个处理器都有其高速缓存.在 ...

  2. node学习笔记_01 环境搭建

    一.下载安装nvm (node版本管理器),方便以后版本切换 nvm list            -> 查看node版本(版本最好在8.0以上,不然在vsCode断点调试进不去,跟node版 ...

  3. BZOJ3673/3674:可持久化并查集

    Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...

  4. 【转】ajax 跨域 headers JavaScript ajax 跨域请求 +设置headers 实践

    解决跨域调用服务并设置headers 主要的解决方法需要通过服务器端设置响应头.正确响应options请求,正确设置 JavaScript端需要设置的headers信息 方能实现. 此处手札 供后人参 ...

  5. python-json模块扩展

    sort_keys=True, indent=4, separators=(',', ': ') 格式 json.dumps(response,sort_keys=True, indent=4, se ...

  6. JDK1.8源码分析之HashMap

    一.前言 在分析jdk1.8后的HashMap源码时,发现网上好多分析都是基于之前的jdk,而Java8的HashMap对之前做了较大的优化,其中最重要的一个优化就是桶中的元素不再唯一按照链表组合,也 ...

  7. 由微软打造的深度学习开放联盟ONNX成立

    导读 如今的微软已经一跃成为全球市值最高的高科技公司之一.2018年11月底,微软公司市值曾两次超越了苹果,成为全球市值最高的公司,之后也一直处于与苹果胶着的状态.市场惊叹微软是一家有能力改造自己并取 ...

  8. 20155207 EXP7 EXP8 EXP9 实验补交

    20155207 EXP7 EXP8 EXP9 实验补交 20155207 EXP7 网络欺诈技术防范 20155207 EXP8 Web基础 20155207 <网络对抗> Exp9 W ...

  9. 《基于Cortex-M4的ucOS-III的应用》课程设计 结题报告

    <基于Cortex-M4的ucOS-III的应用>课程设计 结题报告 小组成员姓名:20155211 解雪莹 20155217 杨笛 20155227 辜彦霖 指导教师:娄嘉鹏 一.设计方 ...

  10. 2017-2018-2 20155233『网络对抗技术』Exp6:信息收集与漏洞扫描

    通过DNS和IP挖掘目标网站的信息 whois查询:用来进行域名注册信息查询,以得到3R注册信息,包括注册人的名字.组织.城市等信息.(进行whois查询时去掉www等前缀,因为注册域名时通常会注册一 ...