读书笔记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, ...
随机推荐
- hdu3047 Zjnu Stadium (并查集)
Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- jdbcTemplate简单使用
package com.bizvane.spider.tools; import org.apache.commons.dbcp.BasicDataSource; import org.springf ...
- Unity手游引擎安全解析及实践
近日,由Unity主办的"Unity技术开放日"在广州成功举办,网易移动安全技术专家卓辉作为特邀嘉宾同现场400名游戏开发者分享了网易在手游安全所积累的经验.当下,很多手游背后都存 ...
- 洛谷P1011 车站
P1011 车站 题目描述 火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上.下车,但上.下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为 ...
- 第六章 “我要点爆”微信小程序云开发实例之爆文详情页制作
爆文详情页制作 从首页中数据列表打开相应详情页面的方法: 给数据列表中每个数据项加一个点击事件,同时将当前数据项的id暂时记录在本地,然后跳转到详情页面detail goopen: function ...
- ios 实现 cell 的动态高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { Mes ...
- jsp学习与提高(三)——JSP Cookie 处理
1.cookie是什么 Cookie是存储在客户机的文本文件,它们保存了大量轨迹信息.在servlet技术基础上,JSP显然能够提供对HTTP cookie的支持. 通常有三个步骤来识别回头客: 服务 ...
- python爬虫——web前端基础(3)
超链接的使用------>>>> 链接的引用使用的是<a>标记. <a>标记的基本语法:<a href="链接地址" ta ...
- 《SQL 进阶教程》 case:在 CASE 表达式中使用聚合函数
1.只加入一个社团的学生的社团id select std_id, max(club_id) from student_clubgroup by std_idhaving count(*) =1---- ...
- STP-13-MST和其它STP版本的互操作性(没写完)
为了理解MST和其他STP版本的互操作性,首先要来看看MST与没有每VLAN概念的纯IEEE802.1D STP或802.1w RSTP非MST交换机(本书称其为非MST交换机)之间互操作的方式.这些 ...