读书笔记2013-2 Linux内核设计与实现A
读书笔记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的更多相关文章
- 【读书笔记】《Linux内核设计与实现》进程管理与进程调度
大学跟老师做嵌入式项目,写过I2C的设备驱动,但对Linux内核的了解也仅限于此.Android系统许多导致root的漏洞都是内核中的,研究起来很有趣,但看相关的分析文章总感觉隔着一层窗户纸,不能完全 ...
- 《Linux内核设计与实现》读书笔记 第一章 Linux内核简介
一.相关历史 1. Unix内核的特点 简洁:仅提供系统调用并有一个非常明确的设计目的 抽象:几乎所有东西都被当做文件 可移植性:使用C语言编写,使得其在各种硬件体系架构面前都具备令人惊异的移植能力 ...
- 【读书笔记::深入理解linux内核】内存寻址【转】
转自:http://www.cnblogs.com/likeyiyy/p/3837272.html 我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0 ...
- 【读书笔记::深入理解linux内核】内存寻址
我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0xC0000000:这是内核地址空间的地址转换关系. 这句话瞬间让我惊呆了,根据我的CPU的知识,开 ...
- LINUX内核设计与实现第三周读书笔记
LINUX内核设计与实现第三周读书笔记 第一章 LINUX内核简介 1.1 Unix的历史 1969年的夏天,贝尔实验室的程序员们在一台PDR-7型机上实现了Unix这个全新的操作系统. 1973年, ...
- 《Linux内核设计与实现》读书笔记(十七)- 设备与模块
本章主要讨论与linux的设备驱动和设备管理的相关的4个内核成分,设备类型,模块,内核对象,sysfs. 主要内容: 设备类型 内核模块 内核对象 sysfs 总结 1. 设备类型 linux中主要由 ...
- 《Linux内核设计与实现》读书笔记(十二)- 内存管理【转】
转自:http://www.cnblogs.com/wang_yb/archive/2013/05/23/3095907.html 内核的内存使用不像用户空间那样随意,内核的内存出现错误时也只有靠自己 ...
- 《Linux内核设计与实现》读书笔记(十一)- 定时器和时间管理【转】
转自:http://www.cnblogs.com/wang_yb/archive/2013/05/10/3070373.html 系统中有很多与时间相关的程序(比如定期执行的任务,某一时间执行的任务 ...
- 《Linux内核设计与实现》读书笔记 - 目录 (完结)
读完这本书回过头才发现, 第一篇笔记居然是 2012年8月发的, 将近一年半的时间才看完这本书(汗!!!). 为了方便以后查看, 做个<Linux内核设计与实现>读书笔记 的目录: < ...
- 《Linux内核设计与实现》读书笔记(十九)- 可移植性
linux内核的移植性非常好, 目前的内核也支持非常多的体系结构(有20多个). 但是刚开始时, linux也只支持 intel i386 架构, 从 v1.2版开始支持 Digital Alpha, ...
随机推荐
- day6 面向对象(3)
继承 1.1 类和类之间的常见关系. 1:既然继承是描述类和类之间的关系,就需要先来了解类和类之间的常见关系 1.1.1 现实生活的整体与部分 举例说明 1:现实生活 1:学生 是人 2: ...
- HDU 3572 Task Schedule (最大流)
C - Task Schedule Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- Web.config文件中关于Cookie安全性的考量和设置
cookie的内容,如图所示: HTTP response header: Set-Cookie: <name>=<value>[; <Max-Age>=<a ...
- cordova之旅之初识
emmmm, 一直徘徊在移动端采用什么技术比较好,一直也没有找到,让我为了一个移动端而去学习一波react全家桶是不现实的操作,反观自己的技术栈,通过长时间的对比和剖析找到了入口点,不管了先会写再说吧 ...
- SCUT - 278 - 谜题#020 - 左偏树
https://scut.online/p/278 第一次遇到不需要并查集的左偏树. #include<bits/stdc++.h> using namespace std; typede ...
- anaconda3安装caffe
使用anaconda3安装caffe踩坑无数次,放弃治疗,直接在~/.bashrc中删除anaconda的路径,备份一下等要用的时候再写上,用默认的python2.7系统环境安装 要使用人脸检测项目中 ...
- 使用Git版本控制工具管理GitHub
使用Git版本控制工具管理GitHu Git是一个分步式的管理系统:只要上传操作得当,所有的都可以相当于是中央服务器,成员代码共享,A写的代码B也有,一般把一个人当做主机,其他人通过该主机拼装代码 ...
- 洛谷 P1908 逆序对(归并排序解法)
树状数组解法:https://www.cnblogs.com/lipeiyi520/p/10846927.html 题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不 ...
- DRF教程9-权限
permissions.py源码分析 SAFE_METHODS = ('GET', 'HEAD', 'OPTIONS') #GET请求,HEAD获取头部信息,OPTIONS获取可用请求类型设置为安全方 ...
- C/C++<算法>进制转换超详细
16转10 用竖式计算: 16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方 第0位: 5 * 16^0 = 5 第1位: F * 16^1 = 240 第 ...