计算机是如何工作的?

计算机的“三大法宝”:

  • 存储程序计算机
  • 函数调用堆栈
  • 中断机制

堆栈是计算机运行高级语言的基础

函数调用堆栈:

32位X86通过函数调用堆栈来传递参数
使用eax保存返回地址

堆栈寄存器和堆栈操作:
ebp仅记录当前函数的调用基址

堆栈相关寄存器:

其他关键寄存器:

函数调用堆栈的工作机制:
call指令:将eip中下一条指令的地址保存在栈顶

函数调用时堆栈的变化:

生成反汇编文件:

  • gcc -g
  • objbump –S

Mykernel实验模拟计算机硬件平台:

  • 中断机制为多道程序设计打下基础
  • 当一个中断信号发生的时候,CPU把当前的eip,esp,ebp都压到内核堆栈中
  • CPU和内核代码共同实现了保存现场和恢复现场
  • Mykernel实验模拟计算机硬件平台模拟了时钟中断

实验:

分析:

1.mypcb.h

  • 14行:定义thread用于存储eip和esp
  • 20、21、22行:定义pid就是进程的ID;进程状态;内核堆栈(进程管理相关的数据结构)
  • 25行:程序入口
  • 26行:用链表连接起来
  • 29行:调度器

2.mymain.c



  • 20行:设定是需要调度的标准
  • 30、31、32行:初始化0号进程的数据结构;状态是正在运行;入口是myprocess
  • 33行:堆栈的栈顶
  • 35行:创建更多的进程。
  • 42行:指向下一个进程。
  • 46行:启动0号进程。
  • 48行-56行:汇编代码,内核初始化工作
  • 52行:ret之后0号进程正式启动。

3.myinterrupt.c



  • 22-25行:my_timer_handler 函数会被内核周期性的调用,每调用1000次,就去将全局变量my_need_sched的值修改为1,通知正在执行的进程执行调度程序my_schedule
  • 57-71行:两个正在运行的进程之间进行上下文切换
  • 58行:把当前进行的ebp保存起来
  • 59行:把当前进程的esp赋给%0(指的是thread.sp)
  • 60行:把%2(指下一个进程的sp)放入esp中
  • 61行:$1f是接下来的标号1:的位置,把eip保存
  • 62行:把下一个进程eip压栈
  • 63行:下一个进程开始执行
  • 66、67行:将该进程置为执行状态,作为当前进程
  • 71-79行:内嵌汇编

总结:

进程是动态执行的实体,内核是进程的管理者。进程不但包括程序的指令和数据,而且包括程序计数器和CPU的所有寄存器以及存储临时数据的进程堆栈。所以,正在执行的进程包括处理器当前的一切活动。
进程既可以在用户态下运行,也能在内核下运行,只是内核提供了一些用户态没有的核心服务,因此进程在访问这些服务时会产生中断,必须进行用户态与内核态的切换。
掌握了函数调用堆栈、进程上下文切换方法。

Linux内核分析第二周总结的更多相关文章

  1. linux内核分析第二周

    网易云课堂linux内核分析第二周 20135103                王海宁 <Linux内核分析>MOOC课程http://mooc.study.163.com/cours ...

  2. LINUX内核分析第二周学习总结——操作系统是如何工作的

    LINUX内核分析第二周学习总结——操作系统是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...

  3. Linux内核分析第二周学习笔记

    linux内核分析第二周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  4. Linux内核分析第二周--操作系统是如何工作的

    Linux内核分析第二周--操作系统是如何工作的 李雪琦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...

  5. Linux内核分析第二周学习博客——完成一个简单的时间片轮转多道程序内核代码

    Linux内核分析第二周学习博客 本周,通过实现一个简单的操作系统内核,我大致了解了操作系统运行的过程. 实验主要步骤如下: 代码分析: void my_process(void) { int i = ...

  6. linux内核分析第二周-完成一个简单的时间片轮转多道程序内核代码

    中断时计算机运行的一个非常重要的功能.之所以重要,是因为由于种种原因,计算机不能将一个程序从头执行到尾不间断,而是可能会出现很多像等待输入设备输出设备的过程,如果没有中断系统,CPU只能等待,造成资源 ...

  7. Linux内核分析第二周学习总结:操作系统是如何工作的?

    韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.函数调用堆栈 ...

  8. Linux内核分析第二周:操作系统是如何工作的

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

  9. linux内核分析 第二周 操作系统是如何工作的

    银雪纯 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.计算机是如何工作的 ...

  10. Linux内核分析 第二周

    Linux内核分析——完成一个简单的时间片轮转多道程序内核代码 张潇月+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100 ...

随机推荐

  1. Django基础与组件

    第一章:Django系列之web应用与http协议 第二章:基于wsgiref模块DIY一个web框架 第三章:Django下载与简介 第四章:url控制系统 第五章:视图 第六章:Django模板语 ...

  2. Effective MySQL之SQL语句最优化——读书笔记之一

    第一章,DBA5分钟速成 本章知识点如下: 寻找运行慢SQL的语句: show full processlist查看所有正在执行的进程及执行的语句耗时: 命令后面\G可以让命令按行显示(默认是按列). ...

  3. 【转】H.264 SVC

    视频厂商POLYCOM,VIDYO和RADVISION等都推出H.264 SVC技术.针对H.264 SVC技术做个介绍. CISCO和POLYCOM都提供了免版税的H.264 SVC的版本. 其中o ...

  4. 如何一步一步建立CAN通讯

    如何一步一步建立CAN通讯 2016-04-12 20:38:14来源: eefocus 关键字:CAN通讯  硬件环境   收藏 评论(0) 分享到 微博 QQ 微信 LinkedIn CAN通讯的 ...

  5. bat输出重定向

    重定向符号主要有:>,>>,<,>&,<&和|,而本文只讨论前五个. 第一节 首先从一个经典问题开始,“1>nul 2>nul”的意思是 ...

  6. 【H5】复制粘贴

    源文案地址 使用案例 案例1:复制分享链接 function copyTextToClipboard(text) { var textArea = document.createElement(&qu ...

  7. 【CobaltStrike】CobaltStrike简介与使用

    CobaltStrike简介与使用 0x00 简介 1. 什么是CobaltStrike?可以用来做什么? CobatStrike是一款基于java编写的全平台多方协同后渗透攻击框架.CobaltSt ...

  8. Tomcat 动态数据库连接池

    package com.boguan.bte.util; import java.sql.Connection;import java.sql.SQLException;import java.uti ...

  9. 20155330 《网络攻防》 Exp3 免杀原理与实践

    20155330 <网络攻防> Exp3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? 基于特征码.先对流行代码特征的提取,然后进行程序的比对,如果也检测到相应的特征码的程序 ...

  10. 如何查看哪个进程,使用了哪个CPU

    某些时候,我们需要知道,在Unix/Linux 环境中,CPU究竟消耗在了哪些进程上面. 如下是最简单的方法: ps -elF