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. vue-router动态添加路由报错

    [报错] Uncaught Error: [vue-router] route config "component" for path: /home cannot be a str ...

  2. P4873 [USACO14DEC] Cow Jog_Gold 牛慢跑(乱搞?二分?)

    (话说最近写的这类题不少啊...) 化简:给定数轴上一系列点,向正方向移动,点不能撞在一起,如果碰到一起就需要放到另外一行,求要多少行才能满足所有点不相撞的条件. (被标签误解,老是想到二分答案... ...

  3. linux shell中使用sed命令

    例1:批量的将变量的值代替指定文件中的指定内容. #!/bin/bash for i in {1..100} mgr_port=`expr $i + 5345` data_port=`expr $i ...

  4. ARM7中断的理解

    谈谈对中断的理解?   中断是计算机中处理异步事件的重要机制      中断触发的方式:       1)中断源级设置          按键:(CPU之外的硬件)               设置中 ...

  5. mysql找出重复数据的方法

    mysql找出重复数据的方法<pre>select openid,count(openid) from info group by openid,jichushezhi_id HAVING ...

  6. PHP防止客户端多次点击

    PHP防止客户端多次点击 第一种用ip判断 第二种就是用 用户名第三种就是cookie仅限 H5第四种 用swoole 用swoole id

  7. php windows与linux下的路径区别

    php windows与linux下的路径区别windows用的是"\",linux用的是"/"这一点要特别清楚,, ps:在PHP windows也可以用/表 ...

  8. php自定义截取中文字符串-utf8版

    php自定义截取中文字符串-utf8版 UTF-8的编码范围(utf-8使用1-6个字节编码字符,实际上只使用了1-4字节): 1个字节:00——7F 2个字节:C080——DFBF 3个字符:E08 ...

  9. Python 基础之re 模块

    Python 基础之大话 re 在使用re模块中主要会用到一下几个方法: re.match() #从头匹配一个字符串 re.search() #浏览全部字符串,匹配第一个符合规则的字符串 re.fin ...

  10. ios遇到的坑

    总结体会:很多ios兼容性问题都是由于body设置了height:100% ios中input输入不了 在ios中margin属性不起作用 设置html body的高度为百分比时,margin-bot ...