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内核简介的更多相关文章

  1. Linux内核分析——第一章 Linux内核简介

    第一章   Linux内核简介 一.Unix的历史 1.Unix系统成为一个强大.健壮和稳定的操作系统的根本原因: (1)简洁 (2)在Unix中,很多东西都被当做文件对待.这种抽象使对数据和对设备的 ...

  2. 《Linux内核设计与实现》读书笔记 第一章 Linux内核简介

    一.相关历史 1. Unix内核的特点 简洁:仅提供系统调用并有一个非常明确的设计目的 抽象:几乎所有东西都被当做文件 可移植性:使用C语言编写,使得其在各种硬件体系架构面前都具备令人惊异的移植能力 ...

  3. 第一章 Linux内核简介

    1. 操作系统和内核 操作系统是指在整个系统中负责完成最基本功能和系统管理的那些部分.包括内核.设备驱动程序.启动引导程序.命令行shell或者其他种类的用户界面.基本的文件管理工具和系统工具. 用户 ...

  4. 2013337朱荟潼 Linux第一章读书笔记——Linux内核简介

    一.Unix历史 二.Linux足迹 类Linux系统.非商业化产品.用途广泛 三.操作系统和Linux内核简介 1.操作系统 (1)是指在整个最基本功能系统中负责完成最基本功能和系统管理的部分. ( ...

  5. Linux 内核简介

    Linux内核简介 一.系统架构 (1). Linux系统架构 ##用户空间: 文件系统 C库 ##内核空间: 接口 内核 (2). Linux内核架构 二.Linux内核源代码 下载地址 www.k ...

  6. Linux内核简介、子系统及分类

    一.内核简介 内核:在计算机科学中是一个用来管理软件发出的数据I/O(输入与输出)要求的计算机程序,将这些要求转译为数据处理的指令并交由中央处理器(CPU)及计算机中其他电子组件进行处理,是现代操作系 ...

  7. Linux内核简介

    内核是提供硬件抽象层.磁盘及文件系统控制.多任务等功能的系统软件.一个内核不是一套完整的操作系统.一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux.Linux内核的主 ...

  8. [国嵌攻略][098][Linux内核简介]

    Linux系统架构 1.用户空间:应用程序.C函数库 2.内核空间:系统调用接口.内核.体系结构相关代码 Linux系统利用处理器不同的工作模式,使用其中的两个级别分别来运行Linux内核与应用程序, ...

  9. 第1章 Linux系统简介

    第1节 UNIX发展历史和发行版本 1. UNIX与Linux发展史 1.1 UNIX发展历史 (1)1965年,美国麻省理工学院(MIT).通用电气公司(GE)及AT&T的贝尔实验室联合开发 ...

随机推荐

  1. mysql基础整理02

    比较运算符 > < = >= <= !=和<> !=和<>都是一个意思,都是不等于的意思 and和or and 并且&& 需要同时满足多 ...

  2. 数据库_Redis 入门基础到高级

    一.PHP消息队列实现及应用 二.消息队列的优缺点 三.消息队列的配置和准备工作 案例如下: 下面是队列表字段及属性 四.Mysql订单队列 1.接受订单,并写入数据 order.php <?p ...

  3. Git命令使用小结

    一.上传你的代码的基本方式 0.在github网站上登录你的账户cynthiawupore,然后新建一个仓库demo 1.初始化 $ git init 2.添加文件夹下所有文件到仓库 $ git ad ...

  4. CSS3 - @keyframes

    语法 @keyframes animationname { keyframes-selector {css-styles;} } 值 描述 animationname 必需.定义动画的名称. keyf ...

  5. @Tranactional 注解分析

    Spring可以通过注解@Transactional来为业务逻辑层的方法(调用DAO完成持久化动作)添加事务能力,如下是@Transactional注解的定义 @Tranactional注解分析 作用 ...

  6. Vue 组件之间传值

    一.父组件向子组件传递数据 在 Vue 中,可以使用 props 向子组件传递数据. 子组件部分: 这是 header.vue 的 HTML 部分,logo 是在 data 中定义的变量. 如果需要从 ...

  7. JVM调优(二)经验参数设置

    调优设置具体解析 堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般限制在1.5 ...

  8. Python 基于Python从mysql表读取千万数据实践

    基于Python 从mysql表读取千万数据实践   by:授客 QQ:1033553122 场景:   有以下两个表,两者都有一个表字段,名为waybill_no,我们需要从tl_waybill_b ...

  9. Android开发CheckBox控件,全选,反选,取消全选

    在Android开发中我们经常会使用CheckBox控件,那么怎么实现CheckBox控件的全选,反选呢 首先布局我们的界面: <?xml version="1.0" enc ...

  10. <1>Linux日志查找方法

    Linux日志查找方法 适用于测试,开发,运维人员,用来查找Linux服务器问题的一般方法,比较实用,如果有更好的办法可以一块讨论,欢迎大神们来指导哈!!! 进入正题 第一步.通过Xshell登录服务 ...