第1章 Linux内核简介
1.1 Unix的历史
unix的优点
- 简介,没有繁冗的系统调用
- 所有东西都被当成了文件对待,对文件和对设备的操作是通过同样的系统调用的接口实现的
- 内核和相关工具使用C编写,具有很高的可移至性
- 创建新的进程非常迅速
- 进程间的通信简单稳定
1.2 追寻Linux足迹
linux和unix并不一样,他并没有使用unix的源代码,只是使用unix的接口名称
1.3 操作系统和内核简介
内核是实现了一组核心系统功能的程序集合,如终端响应、进程管理、内存空间管理等,系统其余部分必须依赖内核来提供服务。
其实内核说白了就是一些代码,当然整个计算机软件都是一些代码,内核和普通的软件代码不同之处在于在提供保护机制的计算机系统里,内核代码拥有更高的权限。当系统执行内核代码的时候,系统处于内核态。内核代码拥有访问受保护内存空间和访问硬件的权力,这种系统态和被保护的内存空间被称为系统空间。当系统执行普通代码的时候,系统处于用户态,只能访问有限的内存空间,这些有限的内存空间被称为用户空间。
我们平时写代码的时候也需要和硬件打交道,比如print函数向屏幕上输出helloworld。但是普通程序是不具备访问硬件的权限的,所以他必须要通过某种方式来让请求内核来实现访问硬件的功能。学究一点的说法就是“应用程序通过系统调用来和内核进行通信”。其实应用程序并非直接和系统调用打交道,比如C语言是先调用库函数然后再由库函数去执行系统调用。库函数封装了一些系统调用不具有的新功能,比如printf打印字符串的功能是通过write系统调用来实现的,printf函数也支持格式化字符串,所以printf函数在系统调用之前先会完成格式化字符串的功能,把格式化之后的字符串作为参数传给write这个系统调用。也有一些简单的库函数直接进行系统调用,比如open。
用学究的可以在面试官面前装逼的语言总结一下上述过程:应用程序通过系统调用而陷入内核,当一个应用程序在执行一条系统调用的时候,内核在代其执行,应用程序通过系统调用在内核空间运行。
内核还要负责硬件和系统之间的通信。硬件和系统的通信是通过中断来实现的,以键盘敲击为例,当敲击键盘输入某个字符的时候,键盘发出一个中断,每一个中断都有自己的一个中断号。内核收到中断请求,根据中断里的中断号去查询相应的中断服务程序去响应中断。比如服务键盘输入的中断会读取输入缓冲区里的字符,并通知键盘可以继续输入了。中断服务程序在一个与进程无关的、专门的中断上下文里运行,这样做是为了提高中断响应速度。
中断是可以屏蔽的,对于某个处理器,它可以屏蔽所有中断也可以选择屏蔽某个中断号的中断。在后面的同步相关章节会设计到。
所有综上所有情况,一个处理器一定是处在下述三种运行状态之下
- 用户空间,执行用户进程
- 内核空间,处于进程上下文,此时是在处理进程的系统调用请求
- 内核空间,处于中断上下文,处理中断
1.4 Linux内核和传统Unix内核的比较
内核的设计分为两大阵营:单内核和微内核。
大多数unix采用的是单内核,即unix内核是一个不可分割的静态可执行库,它以一个巨大的二进制文件的格式存在于磁盘中,所谓不可分割意味着整个内核要么全部被加载要么都不被加载,不存在某一功能模块被加载而另一些功能模块代码没有被加载的情况。整个内核同时被加载意味着他们运行在同一个地址空间中,所以内核间不同的模块不存在通信的问题,可以以函数调用的方式调用不同模块的代码。
与单内核相反,微内核把不同的功能划分成不同的模块,不同的模块运行在不同的地址空间里。一个比较特殊的地方是,作为内核的一些功能模块居然运行在非特权模式下运行,只有少量的具有“强烈请求特权”的功能模块运行在特权模式。因此模块直接的相互调用需要通过某种方式通信,这就产生了进程间通信(IPC)机制,这种通信会带来比单内核之间函数调用更大的代价,而且不同的模式之间的切换设计到内核空间和用户空间的上下文切换。
实际中那些号称微内核的操作系统,比如WindowsNT和MacOSX都是让微内核的所有功能模块运行在内核空间,这是违背了设计初衷的。我们的linux是单内核的,但是他也吸收了微内核的一些精华,比如可以在需要的时候动态的卸载和加载部分内核代码。
第1章 Linux内核简介的更多相关文章
- Linux内核分析——第一章 Linux内核简介
第一章 Linux内核简介 一.Unix的历史 1.Unix系统成为一个强大.健壮和稳定的操作系统的根本原因: (1)简洁 (2)在Unix中,很多东西都被当做文件对待.这种抽象使对数据和对设备的 ...
- 《Linux内核设计与实现》读书笔记 第一章 Linux内核简介
一.相关历史 1. Unix内核的特点 简洁:仅提供系统调用并有一个非常明确的设计目的 抽象:几乎所有东西都被当做文件 可移植性:使用C语言编写,使得其在各种硬件体系架构面前都具备令人惊异的移植能力 ...
- 第一章 Linux内核简介
1. 操作系统和内核 操作系统是指在整个系统中负责完成最基本功能和系统管理的那些部分.包括内核.设备驱动程序.启动引导程序.命令行shell或者其他种类的用户界面.基本的文件管理工具和系统工具. 用户 ...
- 2013337朱荟潼 Linux第一章读书笔记——Linux内核简介
一.Unix历史 二.Linux足迹 类Linux系统.非商业化产品.用途广泛 三.操作系统和Linux内核简介 1.操作系统 (1)是指在整个最基本功能系统中负责完成最基本功能和系统管理的部分. ( ...
- Linux 内核简介
Linux内核简介 一.系统架构 (1). Linux系统架构 ##用户空间: 文件系统 C库 ##内核空间: 接口 内核 (2). Linux内核架构 二.Linux内核源代码 下载地址 www.k ...
- Linux内核简介、子系统及分类
一.内核简介 内核:在计算机科学中是一个用来管理软件发出的数据I/O(输入与输出)要求的计算机程序,将这些要求转译为数据处理的指令并交由中央处理器(CPU)及计算机中其他电子组件进行处理,是现代操作系 ...
- Linux内核简介
内核是提供硬件抽象层.磁盘及文件系统控制.多任务等功能的系统软件.一个内核不是一套完整的操作系统.一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux.Linux内核的主 ...
- [国嵌攻略][098][Linux内核简介]
Linux系统架构 1.用户空间:应用程序.C函数库 2.内核空间:系统调用接口.内核.体系结构相关代码 Linux系统利用处理器不同的工作模式,使用其中的两个级别分别来运行Linux内核与应用程序, ...
- 第1章 Linux系统简介
第1节 UNIX发展历史和发行版本 1. UNIX与Linux发展史 1.1 UNIX发展历史 (1)1965年,美国麻省理工学院(MIT).通用电气公司(GE)及AT&T的贝尔实验室联合开发 ...
随机推荐
- SpringBoot的Autowierd失败
通常是以下几种可能: 1.没有加@Service注解,或者是这个bean没有放在标注了@Configuration这个注解的类下. 2.SpringBoot启动类没有开启扫描 @ComponentSc ...
- AOJ1370: Hidden Anagrams(hash)
题意 题目链接 Sol 直接对出现的次数hash即可,复杂度\(O(26n^2)\) 一开始没判长度条件疯狂wa #include<bits/stdc++.h> //#define int ...
- Django之初识Ajax
1.简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输的数据 ...
- loadrunner 脚本优化-参数化之Parameter List参数取值
脚本优化-参数化之Parameter List参数取值 by:授客 QQ:1033553122 参数取值选项 Select next row Update value on 以上两个选项是改变参数化取 ...
- 关于iframe跨域实践
提要 项目中与到iframe子页面中需要通过top获取在父页面中的全局变量的需求,由于App部署的缘故,导致父页面和iframe子页面分别在不同的端口下,导致iframe跨域现象,通过查阅资料进行问题 ...
- ELK的sentinl告警配置详解
背景 sentinl的监控&告警是通过watch实现的. 一.Watch Execution 执行开始的时候, watcher为watch创建watch执行上下文. 执行上下文提供脚本和模板, ...
- 漫说996icu黑名单
以实际行动声援996icu项目. https://github.com/996icu/996.ICU/blob/master/blacklist/blacklist.md 996公司黑名单,京东,华为 ...
- [20180926]神奇的规避ORA-01795方法.txt
[20180926]神奇的规避ORA-01795方法.txt --//大家知道in里面的值限制1000个值,如果超出报ORA-01795错误. D:\> ooerr 0179501795, 00 ...
- C#判断文件编码——常用字法
使用中文写文章,当篇幅超过一定程度,必然会使用到诸如:“的”.“你”.“我”这样的常用字.本类思想便是提取中文最常用的一百个字,使用中文世界常用编码(主要有GBK.GB2312.GB18030.UTF ...
- 自动化测试基础篇--Selenium文件上传send_keys
摘自https://www.cnblogs.com/sanzangTst/p/8358165.html 文件上传是web页面上很常见的一个功能,自动化成功中操作起来却不是那么简单. 一般分两个场景:一 ...