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

时间:2022-09-23 14:54:47

一、相关历史

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

1. Unix内核的特点

  • 简洁:仅提供系统调用并有一个非常明确的设计目的
  • 抽象:几乎所有东西都被当做文件
  • 可移植性:使用C语言编写,使得其在各种硬件体系架构面前都具备令人惊异的移植能力
  • 进程:创建迅速,一次执行保质保量地完成一个任务;独特的fork系统调用
  • 清晰的层次化结构:策略和机制分离的理念,简单的进程间通信元语把单一目的的程序方便地组合在一起

2. 关于Linux内核

  • */开源的软件

  • 类Unix系统:设计思想相似。

    • 一切皆文件
    • 特定的单一用途 & 简单的组合方式

二、操作系统与内核

1. 一些概念

  • 操作系统:整个系统中负责完成最基本功能和系统管理的部分。

  • 内核:

    • 响应中断的中断服务程序
    • 管理多个进程,分享处理器时间调度程序
    • 管理进程地址空间的内存管理程序
    • 网络、进程间通信
    • ...
  • 内核空间:系统态和被保护起来的内存空间

  • 系统调用:应用程序与内核通信

2.内核的活动范围

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

  • 将每个处理器在任何指定时间点上的活动必然概括为:

      - 运行于用户空间,执行用户进程
    - 运行于内核空间,处于进程上下文,代表某个特定的进程执行
    - 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断

3. 单内核与微内核

  • 单内核

    • 整个内核都在一个大内核地址空间上运行。
    • 优点:简单、高效。所有内核都在一个大的地址空间上,所以内核各个功能之间的调用和调用函数类似,几乎没有性能开销。
    • 缺点:一个功能的崩溃会导致整个内核无法使用。
  • 微内核

    • 内核按功能被划分成各个独立的过程。每个过程独立的运行在自己的地址空间上。
    • 优点:安全。内核的各种服务独立运行,一种服务挂了不会影响其他服务。
    • 缺点:内核各个服务之间的调用涉及进程间的通信,比较复杂且效率低。
  • Linux内核设计

    • 基于单内核
    • 具备微内核的一些特征:模块化设计、抢占式内核、支持内核线程、动态装载内核模块。
    • 规避微内核设计上的性能缺陷:让所有事情运行在内核态,直接调用函数,无需消息传递。
  • Linux内核特征

      - 支持动态加载内核模块
    - 支持对称多处理(SMP)
    - 内核可以抢占(preemptive),允许内核运行的任务有优先执行的能力
    - 不区分线程和进程

三、Linux版本

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

四、总结:关于Linux的思想

1. *与开源

  • free(FSF)VS open(opensource
  • 看了这两个网站之后(额...深感我的英语太差劲了...),感觉*软件应该是在强调用户的的自主性选择权利,而开源强调的是使用与研究的便利条件。
  • 毫无疑问,开放代码有利有弊。就像ios与Android,我虽然很觉得iTunes非常麻烦,但是Android的垃圾软件也太多了,尤其是现在移动终端病毒大量增加,大多是针对开放式的Android系统,至少从感觉上,ios应该是相对安全性高一点。(对于后门问题...对于我这种忘性特别大的人...没有后门怎么找回密码呢...)
  • 当然,Linux开放性并不是混乱没有规则的。实际上,只有在统一的规则下,协作才能发挥它的最大效果。

2. 做好每一件简单的事,学会组合它们

  • 上学期娄老师向我们展示了Linux中的管道时曾经说过,Linux努力只做一件事,然后做好它。再通过简单的方式组合这些简单的工作,就能完成复杂的工程。
  • 我觉得这样的设计思路实用性极强,尤其是在开放性的代码中。就像java中Interface一样,是高内聚,低耦合的(当时觉得这个说法特别高端的样子...),这种特殊的抽象类让各个模块的维护更改更加容易,复用性很高。

参考资料1:《Linux内核设计与实现》(原书第三版)

参考资料2:linux操作系统及内核

《Linux内核设计与实现》读书笔记 第一章 Linux内核简介的更多相关文章

  1. Linux内核设计与实现 读书笔记 转

    Linux内核设计与实现  读书笔记: http://www.cnblogs.com/wang_yb/tag/linux-kernel/ <深入理解LINUX内存管理> http://bl ...

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

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

  3. 《Linux内核设计与实现》读书笔记 第二章 从内核出发

    一.获取内核源码 1. Git git实际上是一种开源的分布式版本控制工具. Linux作为一个开源的内核,其源代码也可以用git下载和管理 - 获取最新提交到版本树的一个副本 - $ git clo ...

  4. Linux内核设计与实现 读书笔记

    第三章 进程管理 1. fork系统调用从内核返回两次: 一次返回到子进程,一次返回到父进程 2. task_struct结构是用slab分配器分配的,2.6以前的是放在内核栈的栈底的:所有进程的ta ...

  5. &period;net架构设计读书笔记--第一章 基础

    第一章 基础 第一节 软件架构与软件架构师  简单的说软件架构即是为客户构建一个软件系统.架构师随便软件架构应运而生,架构师是一个角色. 2000年9月ANSI和IEEE发布了<密集性软件架构建 ...

  6. 《css3实战》读书笔记 第一章 基于CSS需求而编写的HTML&period;

    笔记说明 <CSS3实战手册第3版(影印版)>可以消除Web设计工作的痛苦,并且带给你:HTML--重新入门.如果你是HTML新手,你会学到如何以CSS友好的方式进行基本页面构造.若你是H ...

  7. 《疯狂Java:突破程序员基本功的16课》读书笔记-第一章 数组与内存控制

    很早以前就听过李刚老师的疯狂java系列很不错,所以最近找一本拿来拜读,再此做下读书笔记,促进更好的消化. 使用Java数组之前必须先对数组对象进行初始化.当数组的所有元素都被分配了合适的内存空间,并 ...

  8. 《C&plus;&plus; Primer》读书笔记 第一章

    读<C++ Primer>才知道,自己对C++知之甚少... 写个博客记录下自己C++的成长,只是读书笔记,不是对<C++ Primer>知识点的总结,而是对自己在书上看到的以 ...

  9. 《深入理解计算机系统》(CSAPP)读书笔记 —— 第一章 计算机系统漫游

    本章通过跟踪hello程序的生命周期来开始对计算机系统进行学习.一个源程序从它被程序员创建开始,到在系统上运行,输出简单的消息,然后终止.我们将沿着这个程序的生命周期,简要地介绍一些逐步出现的关键概念 ...

随机推荐

  1. 让BASH&comma;VIM美美的Powerline

    前言  鉴于BASH及其周边强大的工具以及VIM高效快捷,加上现在我工作重心转移到前端开发上,因此我华丽地转向Linux阵营(当然从最傻瓜式的Ubuntu开始啦!).但BASH和VIM默认样式确实颜值 ...

  2. 关于ajax为什么会返回php整个源码

    ajax 程序:返回的是php文件输出的代码. 1. 注意:如果你的php文件包含了html代码或者说是输出了HTML代码,它都会返回给 AJAX. 2. 注意:是整个php文件.这意味着如果你的aj ...

  3. 【Win 10应用开发】SplitView控件

    SplitView控件用于呈现分隔视图,简单地说,就是把一个视图分割为两部分,Content属性所表示的为主要视图,而Pane属性设置的视图则可以隐藏,可以折叠和展开. 估计文字是不太容易介绍这个控件 ...

  4. easyui combotree 只能选择子节点

    //区号只能选子节点 $("#quhao").combotree({ onBeforeSelect: function (node) { //返回树对象 var tree = $( ...

  5. cookie入门与学习

    据我对cookie诞生背景的了解,cookie是由网景公司创建的,目的就是将用户的数据储存在客户端上.伴随的HTML5的出现,现在又有另外一个解决数据离线储存的方案,就是HTML5中的Web stor ...

  6. asp&period;net mvc3&period;0第一个程序helloworld开发图解

    步骤一:新建asp.net mvc3.0项目 (选择Razor模板) 步骤二:创建控制器 步骤三:控制器源码内右键创建对应视图 步骤四:控制器内添加代码 步骤五:视图页面输出内容 步骤六:F5调试

  7. BZOJ 1733&colon; &lbrack;Usaco2005 feb&rsqb;Secret Milking Machine 神秘的挤奶机

    Description 约翰正在制造一台新型的挤奶机,但他不希望别人知道.他希望尽可能久地隐藏这个秘密.他把挤奶机藏在他的农场里,使它不被发现.在挤奶机制造的过程中,他需要去挤奶机所在的地方T(1≤T ...

  8. MFC 显示CImg图片

    很多示例关于CImg都是基于控制台的,如何把它用于MFC中显示. Problem:直接按照控制台示例写入MFC程序中,当程序执行完display后,其后面的代码便不再执行. solution:开辟新的 ...

  9. Node&period;js Buffer&lpar;缓冲区&rpar;

    JavaScript 语言自身只有字符串数据类型,没有二进制数据类型. 但在处理像TCP流或文件流时,必须使用到二进制数据.因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门 ...

  10. python的多线程

    1.多线程的例子 import threading #首先导入threading模块,这是使用多线程的前提 from time import ctime,sleep def music(func): ...