操作系统基本概念(内核态与用户态、操作系统结构)-by sixleaves
内核态与用户态(为什么存在这种机制、程序应处于哪个状态、如何判断当前所处状态、哪些功能需要内核态、如何实现这种机制)
1.首先我们应该思考清楚为什么会有内核态和用户态?(为什么存在这种机制)
因为计算机的资源是有限的, 所以不可能让每个程序都能访问所有资源, 有的程序能访问任何资源, 有的则不能。就如人类社会中的社会地位一样, 越是社会地位高的人, 拥有的资源越多。所以运行于内核态的程序必须要有十分可靠的安全性, 不然随便修改了OS的内核数据结构, 就会造成系统的崩溃。而处于用户态的程序, 最多知识用户程序崩溃, 操作系统还能继续运行。
2.如何判断程序应该处于内核态还是用户态
1.具体来说如果程序能运行在用户态, 就不让其运行于内核态。
2.如果牵扯到的是计算机本体根本运行的事情应该在内核态中执行。而于用户数据, 应用相关的应该方法用户态执行。
3.对于时序性要求非常高的, 也应该放在内核态.比如国家领导人出门做车, 为了保证不塞车, 肯定不是去做公交车。
3.那么哪些功能应该在内核态实现哪些功能在用户态实现
1.CPU管理和内存管理肯定都在内核态.如果放在用户态实现, 就如同一个国家里哪个人都能管理军队, 这是十分危险, 不玩安全的, 所以为了计算机的安全性, 可靠性, 就必须在内核态来实现。所谓的内核态就是拥有特权。
2.诊断和测试程序, 因为诊断和测试程序需要访问计算机所有资源
4.怎么来判断某个进程是处于内核态还是用户态?
1.这显然需要一种标记。而这个标记就是CPU上的一个位, 这个位就可以用来标记当前CPU所处的状态。也就说所谓的程序内核态或者用户态,本质上指的是CPU所处的状态, CPU处于什么状态, 当前程序就是好什么状态。
5.那么我们如何实现内核态和用户这种机制态的呢?
1.我们知道内核态和用户态的区别就是对于资源的访问权限不一样。那么我们如何实现这样的权限?这需要对程序执行的每一条指令进行检查才能完成, 这种检查就是地址翻译。程序发出一条指令都需要经过这个地址翻译过程,从而我们通过控制翻译,就可以限制程序对资源的访问。
2.而内核态对所有资源都有特权, 所以内核程序都是直接绕过内存地址翻译而直接执行特权指令。
操作系统结构(操作系统的结构的发展、微内核)
1.杂乱、无结构:
一开始人们也没有操作系统这个概念, 没有将库函数统称为操作系统。要什么功能就把它加进去, 所以一开始的操作系统是:杂乱的、无结构的。
2.单一操作系统结构:
随着人们的认识, 操作系统慢慢变得有结构, 人们把各种功能归位一个功能块, 彼此相互独立, 能相互调用, 这时候的功能某块是图关系形式的。这样的功能模块关系复杂, 耦合性太高。任意修改一个功能模块, 每个的功能模块都要重新修改。所以人们就先到了人类社会的层级关系。

3.层次化的操作系统结构
人们给操作系统定义了各个的层, 没一层为最临近的高一层提供服务。就如人类社会的结构: 职员--》项目经理--》主管---》公司老大

4.操作系统的结构所带来的问题。
1.首先操作系统的所有功能都在内核态运行。而从用户态转为内核态需要一定的时间成本,这就造成了频发进入内核态会造成操作系统效率低下。
2.其次当操作系统越来越大时, 要保证安全性就越来越难。如1400行的操作系统和40 000 000行的操作系统区别可想而知。
5.微内核
正是基于操作系统接口所带来的问题, 人们又相处一个办法,将操作系统中核心的核心放在内核态, 其它全都移到用户太。这就提高了效率和安全性。如下图,现在各种操作系统都向着这个方向发展。

操作系统基本概念(内核态与用户态、操作系统结构)-by sixleaves的更多相关文章
- go语言学习--内核态和用户态(协程)
go中的一个特点就是引入了相比于线程更加轻量级的协程(用户态的线程),那么什么是用户态和内核态呢? 一.什么是用户态和内核态 当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核 ...
- [OS] 内核态和用户态的区别
http://blog.csdn.net/fatsandwich/article/details/2131707# http://jakielong.iteye.com/blog/771663 当一个 ...
- Linux内核态、用户态简介与IntelCPU特权级别--Ring0-3
一.现代操作系统的权限分离: 现代操作系统一般都至少分为内核态和用户态.一般应用程序通常运行于用户态,而当应用程序调用系统调用时候会执行内核代码,此时会处于内核态.一般的,应用程序是不能随便进入内核态 ...
- cpu与寄存器,内核态与用户态及如何切换
cpu:相当于计算机的大脑负责运算和发送命令: 寄存器:寄存器是cpu当中的一个有限存储部件,cpu从内存调用数据时,寄存器会将从内存调用的数据进行更新在寄存器中以一个字或变量进行存储. 寄存器总共分 ...
- linux内核态和用户态小结
一 内核态和用户态的区别 当进程执行系统调用而陷入内核代码中执行时,我们就称进程处于内核状态.此时处理器处于特权级最高的(0级)内核代码.当进程处于内核态时,执行的内核代码会使用当前的内核栈.每个进程 ...
- cpu内核态与用户态
1.操作系统需要两种CPU状态 内核态(Kernel Mode):运行操作系统程序,操作硬件 用户态(User Mode):运行用户程序 2.指令划分 特权指令:只能由操作系统使用.用户程序不能使用的 ...
- linux内核态和用户态的信号量
在Linux的内核态和用户态都有信号量,使用也不同,简单记录一下. 1> 内核信号量,由内核控制路径使用.内核信号量是struct semaphore类型的对象,它在中定义struct sema ...
- 在linux系统中实现各项监控的关键技术(2)--内核态与用户态进程之间的通信netlink
Netlink 是一种在内核与用户应用间进行双向数据传输的非常好的方式,用户态应用使用标准的 socket API 就可以使用 netlink 提供的强大功能,内核态需要使用专门的内核 API 来使用 ...
- Linux 内核态与用户态通信 netlink
参考资料: https://blog.csdn.net/zqixiao_09/article/details/77131283 https://www.cnblogs.com/lopnor/p/615 ...
随机推荐
- poj 2288 Islands and Bridges_状态压缩dp_哈密尔顿回路问题
题目链接 题目描述:哈密尔顿路问题.n个点,每一个点有权值,设哈密尔顿路为 C1C2...Cn,Ci的权值为Vi,一条哈密尔顿路的值分为三部分计算: 1.每一个点的权值之和 2.对于图中的每一条CiC ...
- JUnit三分钟教程 ---- 实际应用
JUnit三分钟教程 ---- 实际应用 摘自http://lavasoft.blog.51cto.com/62575/65775 接上文"JUnit三分钟教程 ---- 快速起步&qu ...
- (转)25个增强iOS应用程序性能的提示和技巧--中级篇
在性能优化时,当你碰到一些复杂的问题,应该注意和使用如下技巧: 9.重用和延迟加载View10.缓存.缓存.缓存11.考虑绘制12.处理内存警告13.重用花销很大的对象14.使用Sprite Shee ...
- High bridge, low bridge(离散化, 前缀和)
High bridge, low bridge Q:There are one high bridge and one low bridge across the river. The river h ...
- RelativeLayout经常使用属性介绍
以下介绍一下RelativeLayout用到的一些重要的属性: 第一类:属性值为true或false android:layout_centerHrizontal ...
- linux经常使用命令:打包、复制等
备份文件 tar -cf /home/app20140703bak.tar /home/app/uat/test.war 拷贝文件到目标目录 例示: cp -af /app/wasapp/appnam ...
- [Ember] Wraming up
1.1: <!DOCTYPE html> <html> <head> <base href='http://courseware.codeschool.com ...
- Hacker(九)----黑客攻防前准备1
黑客在入侵Internet中其他电脑之前,需要做一系列准备工作,包括在电脑中安装虚拟机.准备常用的工具软件及掌握常用的攻击方法. 一.在计算机中搭建虚拟环境 无论时攻击还是训练,黑客都不会拿实体计算机 ...
- windows下常用的操作命令及dos命令
常用windows运行命令mstsc---远程桌面连接regedit.exe---打开注册表services.msc---打开服务管理器rsop.msc---组策略结果集taskmgr---任务管理器 ...
- EffectiveC#01--避免返回内部类对象的引用
此篇是对00中第3点的再一次阐述. 1.如果一个属性返回一个引用类型,那么调用者就可以访问这个对象的公共成员,也包括修改这些属性的状态. public class MyBusinessObject { ...