读书笔记2013-2 Linux内核设计与实现A

《Linux内核设计与实现》

简介

这本书不是想Linux源码剖析那样一行行分析Linux源代码的书,而是从Linux历史,Linux哲学,Linux设计原理和原则,计算机硬件相关知识,编译安装内核实战等多方面多角度讲述和Linux相关的方方面面。从中学到的更多的不单内核的源代码,而是Linux的哲学。建议所有从事Linux相关工作的猿都要读一下,读完之后,很多东西都变得容易理解,知其然,知其所以然。
如果没有读过《深入理解计算机》类似的图书,建议和《深入理解计算机》一起阅读。
有条件的话建议阅读英文版。

笔记和摘要A

From the beginning to Chapter "The Linux Scheduling Implementation"

1. 有名的Unix哲学--do one thing and do it well.

因为Unix系统创建进程所需时间很短,并且Unix提供简单且健壮的IPC(进程间通信手段),所以设计Unix时可以设计一个个实现单一功能的小程序,并且很方便的将他们组合起来实现很强大的功能,大大提高了程序的通用性和复用性。

2. MMU--Memory Management Unit

MMU是一个专门用于管理内存的硬件,负责完成虚拟内存和物理内存间的转换。通常,它被设计为CPU的一部分,但它也可以以独立硬件的形式出现。
除了管理虚拟内存外,MMU还负责内存保护,为每个进程分配单独的进程空间,CPU高速缓存控制,Bus总线仲裁以及存储体转换(尤其在8位系统上)等工作。

3.如何加快编译Linux内核的速度: make-j32

通过加参数-j来使用多线程来并行编译内核。一般为一个cpu配两个作业任务,所以如果你的服务器的cpu是16核的,则可以指定-j32

4.内核态和用户态的区别

  • 内核态的代码不能访问标准C的库函数或者外部的头文件
  • 内核态的代码依照GNU C标准来编写
  • 内核态的代码没有像用户态那样的防止内存泄露的机制
  • 不能简单的执行浮点型的计算
  • 每个内核态的进程只有一个很小的固定大小的栈(在x86的机器上,一般是4k或8k)
  • 由于内核中有异步中断,是抢占式分配cpu,支持SMP,异步和并行操作主要在内核态完成(没太看懂这段:Because the kernel has asynchronous interrupts,is preemptive,and supports SMP,synchronization and concurrency are major concerns within the kernel.)
  • 对于内核态程序来说,可移植性很重要。

5.进程与线程

进程就是执行中的程序。但不仅仅指程序的源代码,还包括打开的文件、接收到的信号、处理器状态、内存地址空间、执行中的线程、全局变量等。
线程是处理器调度的最小单位。Linux使用一种独特的方式来实现线程:线程与进程没有明显区别,线程就是一种特殊的进程--它们能够与其他进程共享如地址空间等资源。
对进程来说,有两个虚拟化:虚拟内存和虚拟处理器。通过进程调度机制,为每个进程分配独立的虚拟内存和虚拟存储器,所以从进程的角度来看,它们都任务自己独占整个机器。

6.进程描述符

系统用process identification (PID)来标识每个进程。PID其实就是一int型的数字,为了向后兼容,这个数字最大是2的32,768(15次方),这个值记录在<linux/threads.h>里,编译时可以修改。这个值的大小限制着能够同时运行的进程的个数。尽管这个值对于普通desktop来说,足够用了,但对于大的服务器来说,可能不够用。这种情况时管理员可以通过/proc/sys/kernel/pid_max。
在内核中,通常是通过一个指向存储任务信息的结构体task_struct的指针来获取任务信息。
由于x86系统的计算机只有很少的寄存器,所以与大多数体系结构的计算机直接把一些信息存到不同的寄存器里不同,x86系统的计算机将这些信息存到栈里面。

7.进程的状态

进程的状态只可能是下面5种中的一种

  • TASK_RUNNING
  • TASK_INTERRUPTIBLE
  • TASK_UNINTERRUPTIBLE
  • TASK_TRACED
  • TASK_STOPPED

处在TASK_UNINTERRUPTIBLE状态的进程拒绝接受信号,所以无法被杀死

读书笔记2013-2 Linux内核设计与实现A的更多相关文章

  1. 【读书笔记】《Linux内核设计与实现》进程管理与进程调度

    大学跟老师做嵌入式项目,写过I2C的设备驱动,但对Linux内核的了解也仅限于此.Android系统许多导致root的漏洞都是内核中的,研究起来很有趣,但看相关的分析文章总感觉隔着一层窗户纸,不能完全 ...

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

    一.相关历史 1. Unix内核的特点 简洁:仅提供系统调用并有一个非常明确的设计目的 抽象:几乎所有东西都被当做文件 可移植性:使用C语言编写,使得其在各种硬件体系架构面前都具备令人惊异的移植能力 ...

  3. 【读书笔记::深入理解linux内核】内存寻址【转】

    转自:http://www.cnblogs.com/likeyiyy/p/3837272.html 我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0 ...

  4. 【读书笔记::深入理解linux内核】内存寻址

    我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0xC0000000:这是内核地址空间的地址转换关系. 这句话瞬间让我惊呆了,根据我的CPU的知识,开 ...

  5. LINUX内核设计与实现第三周读书笔记

    LINUX内核设计与实现第三周读书笔记 第一章 LINUX内核简介 1.1 Unix的历史 1969年的夏天,贝尔实验室的程序员们在一台PDR-7型机上实现了Unix这个全新的操作系统. 1973年, ...

  6. 《Linux内核设计与实现》读书笔记(十七)- 设备与模块

    本章主要讨论与linux的设备驱动和设备管理的相关的4个内核成分,设备类型,模块,内核对象,sysfs. 主要内容: 设备类型 内核模块 内核对象 sysfs 总结 1. 设备类型 linux中主要由 ...

  7. 《Linux内核设计与实现》读书笔记(十二)- 内存管理【转】

    转自:http://www.cnblogs.com/wang_yb/archive/2013/05/23/3095907.html 内核的内存使用不像用户空间那样随意,内核的内存出现错误时也只有靠自己 ...

  8. 《Linux内核设计与实现》读书笔记(十一)- 定时器和时间管理【转】

    转自:http://www.cnblogs.com/wang_yb/archive/2013/05/10/3070373.html 系统中有很多与时间相关的程序(比如定期执行的任务,某一时间执行的任务 ...

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

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

  10. 《Linux内核设计与实现》读书笔记(十九)- 可移植性

    linux内核的移植性非常好, 目前的内核也支持非常多的体系结构(有20多个). 但是刚开始时, linux也只支持 intel i386 架构, 从 v1.2版开始支持 Digital Alpha, ...

随机推荐

  1. layer常用方法

    弹出层layer的使用 弹出层layer的使用 Intro layer是一款web弹层组件,致力于服务各个水平段的开发人员.layer官网:http://layer.layui.com/ layer侧 ...

  2. dialog 设置maxHeight 最大高度

    WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);Displ ...

  3. WP之样式

    1.定义资源 <Window.Resources> <!--下面用样式--> <Style x:Key="BigFontButtonStyle"> ...

  4. 如何运用多阶构建编写优雅的Dockerfile

    导读 Kubernetes要从容器化开始,而容器又需要从Dockerfile开始,本文将介绍如何写出一个优雅的Dockerfile文件. 文章主要内容包括: Docker容器 Dockerfile 使 ...

  5. js上传文件到后台时序列化数据

    let fd = new FormData() // 定义传递的序列化对象,for (let i = 0; i < addArr.length; i++) { // addArr是选中文件的输入 ...

  6. cogs 1901. [国家集训队2011]数颜色

    Cogs 1901. [国家集训队2011]数颜色 ★★★   输入文件:nt2011_color.in   输出文件:nt2011_color.out   简单对比时间限制:0.6 s   内存限制 ...

  7. 立个flag---每天一篇博客

    从今天开始,需要更努力的学习了.开始写博客.锻炼自己,提高自己,争取可以从前端小菜鸟变成技术大牛.加油!

  8. selenium+Python搭建

    安装环境:windows 7 64位   1.安装python,版本为python2.7 1)下载安装包. 在python官方网站选择下载python2版本的windows安装包:python-2.7 ...

  9. C语言中 malloc函数用法

    一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针 ...

  10. code blocks无法输出中文解决方法

    是CodeBlocks编译器设置问题,在CodeBlocks菜单 settings -> compiler and debugger settings -> global compiler ...