Linux内核设计与实现笔记_1_基本概念

操作系统

系统这个词包含了操作系统和所有运行在它上面的应用程序.操作系统是指在整个系统中负责完成分最基本功能和系统管理的那些部分,这些部分应该包括:

内核,
设备驱动程序,
启动引导程序,
​> 命令行shell,
用户界面,
基本文件管理工具
系统工具.

内核

用户界面是操作系统的外在表象,内核才是操作系统的内在核心,系统的其他部分必须依靠内核这部分软件提供的服务,如

管理硬件设备,
分配系统资源等

内核的组成

内核也被称为管理者或操作系统核心.
通常一个内核由

负责响应中断的中断服务程序,
负责管理进程地址空间的内存管理程序,
负责管理多个进程从而分享处理器时间的调用程序,
网络,进程间通信等系统服务等共同组成.

内核空间

对于具有内核保护机制的现代系统来说,内核独立于普通应用程序,他一般处于系统态,即拥有受到保护的内存空间和访问硬件设备的所有权限.这种系统态和被保护起来的内存空间,统称为内核空间.

用户空间

应用程序在用户空间执行,他们只能看到允许他们使用的部分系统资源,并且只能使用某些特定的系统功能,不能直接访问硬件,也不能访问内核划分给别人的内存范围,还有一些其他的限制.

系统状态的切换

内核运行时,系统以内核态进去内核空间执行,当执行一个普通的用户程序时,系统以用户态进入用户空间执行.

系统调用

应用程序通过系统调用让内核代其完成一些任务.我们称,内核正在代其执行.

应用程序被称为通过系统调用在内核空间运行,而内核被称为运行于上下文中.

应用程序通过系统调用在内核空间运行,是应用程序完成其工作的基本行为方式.

中断机制

硬件想与系统通信时,会发出一个异步中断信号,打断CPU执行,继而打断内核的执行,一个中断对应着一个中断号,内核通过中断号找到并执行对应的中断服务程序,来处理中断.许多操作系统,包括Linux的中断管理程序,都不在进程环境范围中运行,而是在一个专用于处理中断的内核环境范围中执行,为了保证中断的快速处理和快速退出.

每个处理器在任一时刻上的内核活动必然包括三者之一:

  1. 运行于用户空间,执行用户进程.
  2. 运行于内核空间,处理进程上下文,代表某个特定的进程执行.
  3. 运行于内核空间,执行中断上下文,与任何进程无关,处理特定中断.
  4. 当CPU空闲时间,内核就运行一个空进程,处于进程上下文之间,运行于内核空间.

MMU

Unix内核,可以看成是一个静态可执行库,
因此,Unix系统的运行,必须以一个可执行块在一个单独的地址空间中运行.因此需要MMU机制来管理内存;
MMU也称为页机制,Unix内核通常需要硬件系统提供页机制,管理内存,
使得每个进程都能运行在不同的虚拟地址空间中.

操作系统的内核分为三大阵营: 单内核 微内核 外内核

单内核
单内核是最为简单的设计,所谓单内核,就是把内核做为一个大过程来实现,运行在一个单独的地址空间中,将内核以静态二进制文件的形式存放在磁盘中,所有的内核服务都在同一个内核的地址空间中运行.因为大家都运行在内核态,所有的进程和系统服务都在同一个地址间,这使得用户空间与内核空间是在同一个地址空间中,用户程序与系统程序之间可以互相调用,没有隔离,单模块具有简单高性能的特点,大多数Unix系统都设计为单模块.

微内核

微内核将内核划分为多个独立的过程,每个过程称为一个服务器.

只有强烈请求特权服务的服务器,才能够运行在特权模式下,其他服务器都运行于用户空间,
由于内核空间与用户空间在不同的地址区域,所以他们之间不能直接访问,而只能够通过消息传递处理服务器间的通信.系统采用进程间通信IPC机制,各个服务器通过IPC机制互通消息,
这种模块化设计,由于各个服务器都被隔离开运行,在不同的地址区域,这避免了一个服务器崩坏,导致系统崩溃,比单内核更安全.

微内核的缺点:

IPC机制的开销多于函数调用,又涉及到内核空间与用户空间的切换,所以传递消息需要一定的时间,而单内核没有这些开销,实际的微内核系统,通常让全部内核服务都位于一块内核空间中,这使得内核服务之间可以直接调用,避免了内核服务之间传递消息的开销,Windows NT和Max OS X都是微内核的典型实例.

Linux是单内核系统,让所有事情都运行在内核态,直接调用函数,没有传递消息的开销.

Linux内核版本的命名机制:

第一个数字是主版本号
第二个数字是从版本号,偶数为稳定版,奇数为开发版
第三个数字是修订版本号
第四个数字是稳定版本号(可选)
如 2.6.26.1
内核主版本号为2,从版本号为6,修订版本号为26,稳定版本号为1.

Linux内核设计与实现笔记_1_基本概念的更多相关文章

  1. linux内核设计与实现笔记 进程调度

    转载:http://blog.chinaunix.net/uid-24919665-id-3013590.html

  2. 《Linux内核设计与实现》读书笔记(十八)- 内核调试

    内核调试的难点在于它不能像用户态程序调试那样打断点,随时暂停查看各个变量的状态. 也不能像用户态程序那样崩溃后迅速的重启,恢复初始状态. 用户态程序和内核交互,用户态程序的各种状态,错误等可以由内核来 ...

  3. 初探内核之《Linux内核设计与实现》笔记下

    定时器和时间管理 系统中有很多与时间相关的程序(比如定期执行的任务,某一时间执行的任务,推迟一段时间执行的任务),因此,时间的管理对于linux来说非常重要. 主要内容: 系统时间 定时器 定时器相关 ...

  4. 《Linux内核设计与实现》课本第四章自学笔记——20135203齐岳

    <Linux内核设计与实现>课本第四章自学笔记 进程调度 By20135203齐岳 4.1 多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统.多任务操作系统使多个进程处于堵 ...

  5. 《Linux内核设计与实现》课本第三章自学笔记——20135203齐岳

    <Linux内核设计与实现>课本第三章自学笔记 进程管理 By20135203齐岳 进程 进程:处于执行期的程序.包括代码段和打开的文件.挂起的信号.内核内部数据.处理器状态一个或多个具有 ...

  6. 《Linux内核设计与实现》课本第十八章自学笔记——20135203齐岳

    <Linux内核设计与实现>课本第十八章自学笔记 By20135203齐岳 通过打印来调试 printk()是内核提供的格式化打印函数,除了和C库提供的printf()函数功能相同外还有一 ...

  7. 《Linux内核设计与实现》课本第五章学习笔记——20135203齐岳

    <Linux内核设计与实现>课本第五章学习笔记 By20135203齐岳 与内核通信 用户空间进程和硬件设备之间通过系统调用来交互,其主要作用有三个. 为用户空间提供了硬件的抽象接口. 保 ...

  8. 《Linux内核设计与实现》读书笔记 - 目录 (完结)

    读完这本书回过头才发现, 第一篇笔记居然是 2012年8月发的, 将近一年半的时间才看完这本书(汗!!!). 为了方便以后查看, 做个<Linux内核设计与实现>读书笔记 的目录: < ...

  9. 《Linux内核设计与实现》课本第一章&第二章学习笔记

    <Linux内核设计与实现>课本学习笔记 By20135203齐岳 一.Linux内核简介 Unix内核的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆文件 ...

随机推荐

  1. 【翻译】Prometheus 2.12.0 新特性

    Prometheus 2.12.0 现在(2019.08.17)已经发布,在上个月的 2.11.0 之后又进行了一些修正和改进. 在当前的 6 周发布周期中,每一个 Prometheus 版本都有比较 ...

  2. csps51(a)

    T1的暴力死掉了...... T3大众分...... T2打了几个小表,发现了一些规律,成功yy出了$O(nlogalogn)$的暴力,拿到了73pts,弥补了爆炸的T1. T1. 考场上看了看,遥远 ...

  3. 基于 Jenkins Pipeline 自动化部署

    最近在公司推行Docker Swarm集群的过程中,需要用到Jenkins来做自动化部署,Jenkins实现自动化部署有很多种方案,可以直接在jenkins页面写Job,把一些操作和脚本都通过页面设置 ...

  4. 从壹开始【NetCore3.0】 46 ║ 授权认证:自定义返回格式

    前言 哈喽大家好,马上就要年末了,距离新的一年,只有50天了,春节是75天. 在这个时节内,天气逐渐变凉,但是大家的心肯定很热吧,因为发生了两件大事: 1.双十一买买买,在这个让人激动又纠结的一天,大 ...

  5. %%%GXZ大佬回关

  6. JavaScript-原型对象与原型链

    原型对象 1.每个对象一定会有一个原型对象 2.原型对象实际是构造实例对象的构造器中的一个属性,只不过这个属性是个对象 3.这个原型对象中的属性与方法,都会被对象实例所共享(类似python中的类方法 ...

  7. Java类/接口的API

    本章节收集的类/接口API有: Object类,枚举,包装类,接口Comparable,类Arrays,异常, Object类 public String toString(): [把一个对象的信息用 ...

  8. Java多态——代码示例

    刚开始看多态的文字定义时,总是不明白说的啥意思,看了一些示例代码后,总算知道了,其实也就是“多态”的字面意思. 如下: class A{ public void Out() { System.out. ...

  9. mysql 创建用户及授权(1)

    一. 创建用户 命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明: username:你将创建的用户名 host:指定该用户 ...

  10. nyoj 20-吝啬的国度 (DFS)

    20-吝啬的国度 内存限制:64MB 时间限制:1000ms Special Judge: No accepted:12 submit:43 题目描述: 在一个吝啬的国度里有N个城市,这N个城市间只有 ...