Linux操作系统是如何工作的
《实验五——Linux操作系统是如何工作的?破解操作系统的奥秘》
姓名:方超
学号:SA12**6201
Linux操作系统工作的基础
存储程序计算机、堆栈(函数调用堆栈)机制和中断机制是Linux操作系统工作的三大基础。
存储程序计算机是目前通用计算机的工作模型,程序指令保存在存储器中,处理器与存储器通过总线相连,处理器从存储器中获取指令和数据并执行,执行方向是逐条执行。存储器中存储的数据可以随机的读取,处理器的程序指针寄存器(x86中是EIP)标志着当前或者即将执行的指令在存储器中的存储位置。Linux默认工作在这种存储程序计算机模型之上。
堆栈机制是C语言函数调用的基础,而Linux内核大部分是用C语言编写的,因此堆栈对于Linux系统也至关重要。
中断机制是现代多任务操作系统的基础,可以说没有中断机制就不可能实现多任务切换。中断机制大致就是向处理器发出中断信号,处理器收到中断信号后会从存储器的固定位置取指令执行。
Linux操作系统工作的原理
在Linux操作系统中,为了系统内核的安全不受用户应用程序的破坏,将系统工作的状态分为了用户态和内核态,用户态是应用程序工作的状态,而Linux内核运行时的状态就是内核态。处于用户态的代码无法访问到内核态的代码和数据,这就最大限度的保护了系统的安全。我们知道应用程序主要是完成某种特定的功能,而操作系统的主要功能就是对计算机的各种资源进行管理,我们在使用计算机时主要就是使用各种应用程序。在使用Linux操作系统中,大部分时间系统都工作在用户态,但是当出现需要进程调度或者应用程序请求系统调用等需要内核运行时,系统是怎样完成从用户态到内核态的切换,而又返回到内核态的呢?
答案就是通过中断机制,陷入Linux内核的唯一办法就是中断(这里中断的概念也包括了异常,处理器处理中断和异常的机制是类似的)。中断发生后,处理器会首先根据该进程的TSS段将SS和ESP设置为指向本进程的内核栈。然后将当前在用户态运行的应用程序的eflags,cs及eip的内容压入到该进程的内核栈中,强制将CS和EIP设置为对应中断类型的中断处理程序,在中断处理程序中会调用SAVE_ALL宏来将剩余的寄存器的值压入内核堆栈。以上动作可以理解为保存应用程序的执行断点。之后内核根据中断的类型执行相应的中断服务程序。当中断服务程序执行完毕后,内核会执行schedule函数进行进程调度以选择出将要执行的进程并调用__switch_to函数将SS和ESP切换到即将要执行的进程的内核栈。此时栈中保存了即将运行进程的执行断点,内核调用restore_all函数来将程序的执行断点恢复至各个寄存器,然后执行iret指令将eflags,CS和EIP,SS和ESP(指向进程的用户栈地址)从内核栈中恢复。至此,系统从内核态返回用户态。
Linux操作系统是如何工作的的更多相关文章
- 浅析Linux操作系统是如何工作的(思维导图)
SA***189 多任务计算机运转机制如下思维导图所示: 小结: Linux操作系统是一个在时钟的节拍下,各个模块紧密协作.密不可分的整体,而整个Linux系统都是建立在存储程序的基础之上,正是有了程 ...
- Linux操作系统是如何工作的?破解操作系统的奥秘
学号:SA12**6112 研究笔记: 1:计算机是怎么样工作的 2:用户态到内核态切换之奥秘解析 3:进程切换之奥秘解析 本博文主要是根据前3篇笔记来总结Linux内核的工作机制. 一:操作系统工作 ...
- Linux内核分析第二周学习总结:操作系统是如何工作的?
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.函数调用堆栈 ...
- Linux操作系统学习_操作系统是如何工作的
实验五:Linux操作系统是如何工作的? 学号:SA1****369 操作系统工作的基础:存储程序计算机.堆栈(函数调用堆栈)机制和中断机制 首先要整明白的一个问题是什么是存储程序计算机?其实存储程序 ...
- linux内核分析作业:操作系统是如何工作的进行:完成一个简单的时间片轮转多道程序内核代码
计算机如何工作 三个法宝:存储程序计算机.函数调用堆栈.中断机制. 堆栈 函数调用框架 传递参数 保存返回地址 提供局部变量空间 堆栈相关的寄存器 Esp 堆栈指针 (stack pointer) ...
- 《Linux内核分析》第二周 操作系统是如何工作的?
[刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK TWO(2 ...
- Linux内核分析——操作系统是如何工作的
万子惠 + 原创作品转载请注明出处 + <Linux内核分析> 实验部分 使用实验楼的虚拟机打开shell 然后cd mykernel 您可以看到qemu窗口输出的内容的代码mymain. ...
- Linux内核分析之操作系统是如何工作的
在本周的课程中,孟老师主要讲解了操作系统是如何工作的,我根据自己的理解写了这篇博客,请各位小伙伴多多指正. 一.知识点总结 1. 三个法宝 存储程序计算机:所有计算机基础性的逻辑框架. 堆栈:高级语言 ...
- Linux内核分析作业二—操作系统是如何工作的
一.实验:简单的时间片轮转多道程序内核代码运行与分析 my_start_kernel之前都是硬件初始化,它是操作系统的执行入口,每循环100000次就进行一次打印. 执行更加简单,每次时钟中断时都会调 ...
随机推荐
- iOS 常见面试图总结2
1.请简述storyboard和xib的差别? 一个project中.能够有多个xib文件,一个xib文件相应着一个视图类控制器,和多个视图. 然而.使用 storyboard时,一个project仅 ...
- word2010无法显示endnote x7插件及破解endnote x7
最近本人由于要写文章需要使用endnotex7,相比于mendeley和noteexpress,文献管理和引用我喜欢endnote x7,阅读喜欢mendeley.可是由于之前用的正版30天到期了,破 ...
- mysql(8.0.*版本 windows10 )忘记密码解决方案
安装完mysql-8.0.13-winx64后,一些列的安装命令过后再执行mysql -uroot -p之后 报错了 what fuck 什么鬼,就是这个错 ERROR (): Access deni ...
- nginx高级-前端必会
需要设置的几个参数: 基本配置文件 user www www; worker_processes auto; error_log /www/wwwlogs/nginx_error.log crit; ...
- [原创]c语言中const与指针的用法
最近一直在准备笔试,补补大一大二欠下的课.复习c语言时碰见这么个题: 1 2 3 4 5 int a=248, b=4; int const c=21; const int *d=&a; ...
- 数据库自动备份压缩脚本(备份最近七天,七天之前自动删除,只保留rar文件)
把下面脚本添加到服务器计划任务中去,设置为每天执行即可,文件备份路径即为脚本所在路径,必须安装压缩文件 @echo offrem 计算指定天数之前的日期,用于后面删除指定天数的数据set DaysAg ...
- 产品开发也要看阵容,APP开发只需五步变得靠谱
最早认识的一个朋友是程序员,曾经到一家外包公司接单子,小外包公司经常遇到的问题就是和需求方谈产品功能.客户要做外包,对方让他一次性报价,但是客户连功能点自己都不清楚,这时朋友说还是按照具体功能点来做吧 ...
- 页面定制CSS代码初探(二):自定义h2标题样式 添加阴影 添加底色 等
故事的开始 先说一下<h2></h2>原先默认是空白的,很难看 然后今天无意中看到一个博友的标题很好看啊,一直就想要这种效果有没有? 好的东西自然要拿过来啦 通过审查元素,果然 ...
- jq——css类
1 addClass(classname) 添加类 <script type="text/javascript"> $("input").clic ...
- IOS - plist使用
//1 可读取,不可写入工程下的plist文件: // NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"O ...