Linux内核及分析 第二周 操作系统是如何工作的?
计算机是如何工作的?
存储程序计算机工作模型,计算机系统最最基础性的逻辑结构;
函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算机来说并不那么重要,但有了高级语言及函数,堆栈成为了计算机的基础功能;
enter
--pushl %ebp
--movl %esp,%ebp
leave
--movl %ebp,%esp
--popl %ebp
函数参数传递机制和局部变量存储
中断,多道程序操作系统的基点,没有中断机制程序只能从头一直运行结束才有可能开始运行其他程序。
♦ 堆栈相关的寄存器
– esp,堆栈指针(stack pointer)
– ebp,基址指针(base pointer)
♦ 堆栈操作
– push
栈顶地址减少4个字节(32位)
– pop
栈顶地址增加4个字节
♦ ebp在C语言中用作记录当前函数调用基址
♦ 其他关键寄存器
– cs : eip:总是指向下一条的指令地址
• 顺序执行:总是指向地址连续的下一条指令
• 跳转/分支:执行这样的指令的时候,cs : eip的值会
根据程序需要被修改
• call:将当前cs : eip的值压入栈顶,cs : eip指向被
调用函数的入口地址
• ret:从栈顶弹出原来保存在这里的cs : eip的值,放
入cs : eip中
以下是实验内容:
qemu窗口可以看到my_start_kernel在执行,同时my_timer_handler时钟中断处理程序周期性执行。
内核头文件;
执行my_start_kernel,83行之前是硬件初始化,83行及以后是操作系统。
比较简单,每循环100000次打印“my_start_kernel here”
同样是硬件初始化;
每次时钟中断调用一次printk,输出一个">>>>>>>>my_timer_handler here<<<<<<<<",中断处理动作
作者: 王雪铖
原创作品转载请注明出处
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
Linux内核及分析 第二周 操作系统是如何工作的?的更多相关文章
- Linux内核分析第二周--操作系统是如何工作的
Linux内核分析第二周--操作系统是如何工作的 李雪琦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...
- linux内核分析 第二周 操作系统是如何工作的
银雪纯 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.计算机是如何工作的 ...
- 20135327郭皓——Linux内核分析第二周 操作系统是如何工作的
操作系统是如何工作的 上章重点回顾: 计算机是如何工作的?(总结)——三个法宝 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的 ...
- Linux内核及分析 第一周 计算机是如何工作的?
C语言代码: int g(int x) { return x + 5; } int f(int x) { return g(x); } int main(void) { return f(5) + 1 ...
- Linux内核设计(第二周)——操作系统工作原理
Linux内核设计(第二周)--操作系统工作原理 by苏正生 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...
- 《Linux内核分析》第二周 操作系统是如何工作的?
[刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK TWO(2 ...
- linux 内核 第二周 操作系统是如何工作的
姬梦馨 原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一:计算机的三个法宝 存储程序计算机工 ...
- Linux内核读书笔记第二周
什么是系统调用 简单来说,系统调用就是用户程序和硬件设备之间的桥梁.用户程序在需要的时候,通过系统调用来使用硬件设备. 系统调用的存在,有以下重要的意义: 1)用户程序通过系统调用来使用硬件,而不用关 ...
- 《Linux内核分析》 第二节 操作系统是如何工作的
Linux内核分析 第二周 操作系统是如何工作的 张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/UST ...
随机推荐
- HashMap探究
HashMap 前置 //初始化容量 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; //容器最大容量 static final i ...
- 【PAT】B1075 链表元素分类(25 分)
这道题算有点难,心目中理想的难度. 不能前怕狼后怕虎,一会担心超时,一会又担心内存过大,直接撸 将三部分分别保存到vector 有意思的在于输出 分别输出第一个的add和num 中间输出nextadd ...
- 5.3Python函数(三)
目录 目录 前言 (一)装饰器 ==1.简单的装饰器== ==2.修饰带参数函数的装饰器== ==3.修饰带返回值函数的装饰器== ==4.自身带参数的装饰器== (二)迭代器 (三)生成器 ==1. ...
- 静态库lib调试
1.首先生成lib文件的解决方案编译通过. 2.将最新的lib和头文件在需要调用的exe中,替换掉. 3.复制需要调试的cpp文件到exe解决方案下,并添加现有项. 4.运行无错误后,添加断点即可调试 ...
- Arduino IDE for ESP8266教程(0)配置IDE
淘宝链接 https://detail.tmall.com/item.htm?id=540067174120&spm=a1z09.2.0.0.6f7c6509ujAvQs&_u=71q ...
- sysbench数据库压力测试
sysbench是一款压力测试工具,可以测试系统的硬件性能,也可以用来对数据库进行基准测试 wget https://github.com/akopytov/sysbench/archive/1.0. ...
- 深入理解mybatis原理, Mybatis初始化SqlSessionFactory机制详解(转)
文章转自http://blog.csdn.net/l454822901/article/details/51829785 对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章 ...
- java mysql的latin1转UTF-8
public String convertCharset(String s) { if (s != null) { try { int length = s.length(); byte[] buff ...
- Linux -- 利用 ptrace 进行代码注入
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h&g ...
- FreeRTOS的任务非运行态
当FreeRTOS启动任务调度器以后,任务调度器会在心跳中断函数中确定下一个要运行的任务,如果任务调度器仅仅依靠任务优先级来判断该运行哪个任务,这样会造成低优先级的任务根本没法运行,因为FreeRTO ...