当前位置: 首页 > news >正文

Linux内核设计与实现 第一章 Linux内核简介

1.1Unix的历史

1969,贝尔实验室的程序员Dennis Ritchie 和Ken Thompsin等,编写Multics失败,不甘心没有交互式操作系统,设计了一个文件系统原型,这个原型最终演化成了Unix。
Unix系统设计简洁,发布时提供源代码,用C语言整个重写了(移植性强),所以很多组织团体尝试开发它。其中,加州大学伯克利分校就开发的很成功。

Unix强大的根本原因是它有一下特点:
1)简洁:系统调用少
2)Unix中,所有的东西都被当做文件对待
3)移植能力:Unix的内核和相关的系统工具是用C语言编写的
4)策略和机制分离的设计理念:此理念就需要a)进程创建简洁;b)进程间通信机制简单稳定。如此各个单一目的的程序片段组合简单,分工协作就会使系统有清晰的层次化结构。
大多数编程问题实际上都可以分成两部分:“需要提供什么功能”(机制)和“如何使用这些功能”(策略)
解决问题的方法是将调度机制(scheduling mechanism)与调度策略(scheduling policy)分离,也就是将调度算法以某种形式参数化,而参数可以由用户进程填写。看一下数据库的例子。假设内核使用优先级调度算法,但提供一条可供进程设置(并改变)优先级的系统调用。这样,尽管父进程本身并不参与调度,但它可以控制如何调度子进程的细节。在这里,调度机制位于内核,而调度策略则由用户进程决定。

1.2追寻Linus足迹:Linux简介

1991,芬兰学生Linus,因为不能对Minix乱改,所以自己开发了使用Inter 80386微处理器的不成熟的但五脏俱全的Unix,发布到Internet,linux从此扬帆起航。
Linux是类Unix系统,但它不是unix。没有使用unix的源码,但借鉴了unix很多,不同之处也很多
linux是非商业化的产品且用途广泛
Linux的自由大致是你可以随意更改,但是随意更改后要发布改过的版本,必须允许别人随意更改

1.3操作系统和内核简介

操作系统是指在整个系统中负责完成最基本功能和系统管理的那一部分。
系统这个词其实包含了操作系统和所有运行在它之上的应用程序。
用户界面是操作系统的外在表象,内核才是操作系统的内在核心。
通常一个内核由负责响应中断的中断服务程序,负责管理多进程从而分享处理器时间的调度程序,负责管理进程地址空间的内存管理程序和网路、进程间通信等系统服务程序组成。
保护机制:内核空间,用户空间。
应用程序完成工作的基本方式是通过系统调用界面陷入内核:在系统中运行的应用程序通过系统调用来与内核通信,应用程序通常调用库函数,再由库函数通过系统调用界面,让内核代其完成不同任务。

上下文:
处理器总处于以下状态中的一种:
1、内核态,运行于进程上下文,内核代表进程运行于内核空间;
2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;
3、用户态,运行于用户空间。
1)进程上下文:当一个进程在执行时,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容被称为该进程的上下文。当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的上下文,以便在再次执行该进程时,能够必得到切换时的状态执行下去。在LINUX中,当前进程上下文均保存在进程的任务数据结构中。在发生中断时,内核就在被中断进程的上下文中,在内核态下执行中断服务例程。但同时会保留所有需要用到的资源,以便中断服务结束时能恢复被中断进程的执行。
2)中断上下文:硬件通过触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。所谓的“中断上下文”,其实也可以看作就是硬件传递过来的这些参数和内核需要保存的一些其他环境(主要是当前被打断执行的进程环境)。

1.4Linux内核与传统Unix内核的比较

1.5Linux内核版本

在这里插入图片描述

内核开发大致阶段:众多开发者尝试往Linux加入一些新的特性->确定加入哪些特性,不再接受新的特性->众多开发者对实现新特性的代码加入自己发现的BUG->发布稳定

1.6Linux内核开发者社区在这里插入图片描述

LWN.net对Linux内核开发的报道是详细,技术性和及时性的。也许你应该阅读“Kernel coverage at LWN.net”在网址:http://lwn.net/Kernel/.

更多GNU软件和linux关系的讨论可以在http://www.gnu.org/gnu/linux-and-gnu.html获取

vger是发布LKML服务机器的名字。服务器同样存放了大量其他linux相关邮箱。更多的信息可以在下面的网页找到:http://vger.kernel.org/

  1. 如何向linux-内核邮件列表注册?
    答:订阅前请仔细考虑。你是否希望邮箱里面出现很多的邮件?你是否那么关心linux内核开发期待每周更新一次内核,忍受bug,错误和系统崩溃的时间和精力的浪费?你是否准备好加入伟大的企鹅,并被人称为怪胎?
    好了,如果你仍然期待加入,发送 “subscribe linux-kernel your_email@your_ISP” 到majordomo@vger.kernel.org (注意,不要包含双引号字符,当然替换你自己的邮箱地址)。你将会完成订阅。我经常看到如下的报告:
    FAILED:
    : …
    <<- RCPT To:edmond@cedar-republic.com
    ->> 550 edmond@cedar-republic.com… we do not relay

反馈这个问题到网址: http://vger.kernel.org/mxverify.html。
确认你没有上述问题!详见: http://vger.kernel.org/majordomo-info.html。

相关文章:

  • dubbo java api
  • switch选择结构
  • Vue基础(九)——ElementUI
  • Linux(一)最简单的LED驱动程序(应用层和驱动层分析)
  • 猿创征文 | [云原生]为微服务保驾护航之链路跟踪skywalking保姆级搭建教程
  • 雅思口语高分课程
  • java面向对象面试题的考点整理
  • Mac 下 brew 切换为国内源,安装 sshfs
  • 【明年找到好工作】:面试题打卡第三天
  • 网课搜题公众号接口 大学生新手使用必备
  • Github操作—团队内协作(四)——Git
  • redis集群模式详解
  • VMware——虚拟机的创建(Linux)
  • 读书记:认知觉醒(三)元认知、自控力
  • 中缀表达式转后缀表达式,及含多位负数的中缀表达式计算(中缀转后缀解法)
  • 「面试题」如何实现一个圣杯布局?
  • EOS是什么
  • gulp 教程
  • Java精华积累:初学者都应该搞懂的问题
  • leetcode46 Permutation 排列组合
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • mac修复ab及siege安装
  • Mocha测试初探
  • React系列之 Redux 架构模式
  • Spring Boot MyBatis配置多种数据库
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 不上全站https的网站你们就等着被恶心死吧
  • 来,膜拜下android roadmap,强大的执行力
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 最简单的无缝轮播
  • Semaphore
  • 大数据全解:定义、价值及挑战
  • 数据可视化之下发图实践
  • ​MySQL主从复制一致性检测
  • #define
  • (20050108)又读《平凡的世界》
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (ZT)一个美国文科博士的YardLife
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (区间dp) (经典例题) 石子合并
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (一)插入排序
  • (转载)OpenStack Hacker养成指南
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .NET 设计一套高性能的弱事件机制
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .NET微信公众号开发-2.0创建自定义菜单
  • [ 数据结构 - C++] AVL树原理及实现
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [BZOJ3757] 苹果树
  • [codevs 1296] 营业额统计
  • [Go WebSocket] 多房间的聊天室(三)自动清理无人房间
  • [ICCV2017]Neural Person Search Machines
  • [IE编程] IE8的SDK 下载