zoukankan      html  css  js  c++  java
  • 《Linux内核设计与实现》读书笔记 第一章 Linux内核简介

    一、相关历史

    1. Unix内核的特点

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

    2. 关于Linux内核

    • 自由/开源的软件

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

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

    二、操作系统与内核

    1. 一些概念

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

    • 内核:

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

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

    2.内核的活动范围

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

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

    3. 单内核与微内核

    • 单内核

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

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

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

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

    三、Linux版本

    四、总结:关于Linux的思想

    1. 自由与开源

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

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

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

    参考资料1:《Linux内核设计与实现》(原书第三版)
    参考资料2:linux操作系统及内核

  • 相关阅读:
    我为何看到你的提问不想回答?关于如何提问的一些看法
    零基础一步一步pytorch实现Logistic regression逻辑回归编程教程
    numpy与pytorch实现梯度下降,实现一个简单的两层神经网络
    [ubuntu]Gedit修改文件后提示无法创建备份文件同时不能保存修改过后的文件
    【测绘】高速公路中线放样
    【GDAL】图像处理三:图像平滑(一)
    【GDAL】图像处理二:初级图像读取,操作,存储。
    【GDAL】图像处理一:GDAL1.9.2在vs2010旗舰版中的配置
    【openCV】openCV2.4.8在vs2010旗舰版中的配置
    【c++】大数相加
  • 原文地址:https://www.cnblogs.com/hyq20135317/p/5268866.html
Copyright © 2011-2022 走看看