第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的贝尔实验室联合开发 ...
随机推荐
- php环境安装
Windows安装 下载php压缩包, http://php.net/downloads.php, 一定要下载Windows版本的呦 将压缩包解压到指定目录下: 创建配置文件, 其中有两个配置文件在根 ...
- 几点建议帮你写出简洁的JS代码
译者按: 规范的代码可以有效避免代码bug,fundebug才会报警少一点! 原文: Tips for Writing Cleaner Code 译者: Fundebug 为了保证可读性,本文采用意译 ...
- javascript 里面 with 关键字
1.with的基本概念 with语句的作用是将代码的作用域设置到一个特定的作用域中,目的是为了简化多次编写访问同一对象的工作.基本语法如下: with (expression) statement 下 ...
- AI在汽车中的应用:实用深度学习
https://mp.weixin.qq.com/s/NIza8E5clC18eMF_4GMwDw 深度学习的“深度”层面源于输入层和输出层之间实现的隐含层数目,隐含层利用数学方法处理(筛选/卷积)各 ...
- Python_json数据检索与定位之jsonPath类库
json数据检索与定位之jsonPath类库 by:授客 QQ:1033553122 实践环境 win7 64 Python 3.4.0 jsonpath_ng-1.4.3-py2.py3-non ...
- MySQL 横向表分区之RANGE分区小结
MySQL 横向表分区之RANGE分区小结 by:授客 QQ:1033553122 目录 简介 1 RANGE分区 1 创建分区表 1 查看表分区 2 新增表分区 2 新增数据 3 分区表查询 3 删 ...
- mysql数据库的基本操作:创建数据库、查看数据库、修改数据库、删除数据库
本节相关: 创建数据库 查看数据库 修改数据库 删除数据库 首发时间:2018-02-13 20:47 修改: 2018-04-07:考虑到规范化,将所有语法中“关键字”变成大写;以及因为整理“mys ...
- Linux 无线网卡配置
无线网卡常见的配置选项 某TL-WR842N路由器无线配置选项含义: 无线名称 路由器的无线(Wi-Fi)名称.无线密码 无线加密使用WPA2-PSK/WPA-PSK加密方式.AES加密算法,无线密码 ...
- c/c++二叉树的创建与遍历(非递归遍历左右中,破坏树结构)
二叉树的创建与遍历(非递归遍历左右中,破坏树结构) 创建 二叉树的递归3种遍历方式: 1,先中心,再左树,再右树 2,先左树,再中心,再右树 3,先左树,再右树,再中心 二叉树的非递归4种遍历方式: ...
- python爬虫起步...开发环境搭建,最简单的方式
研究一门编程语言,一般第一步就是配置安装部署相关的编程环境.我认为啊,在学习的初期,大家不是十分了解相关的环境,或者是jar包,python模块等的相关内容,就不需要花费大量的时间去研究如何去安装它. ...