<Linux内核设计与实现>第四周读书笔记--第五章 20135301张忻 估算学习时间:共1.5小时 读书:1.0 代码:0 作业:0 博客:0.5 实际学习时间:共2.0小时 读书:1.0 代码:0 作业:0 博客:1.0 耗时估计的公式:Y=X+X/N ,Y=X-X/N 5.1 与内核通信57 系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: 首先它为用户空间提供了一种硬件的抽象接口,举例来说当需要读写文件的时候,应用程序就可以不去管磁盘类型和介质,甚至不用去管…
LINUX内核设计与实现第三周读书笔记 第一章 LINUX内核简介 1.1 Unix的历史 1969年的夏天,贝尔实验室的程序员们在一台PDR-7型机上实现了Unix这个全新的操作系统. 1973年,整个Unix系统用C语言进行了重写,给后来Unix系统的广泛移植铺平了道路. 伯克利的第一个Unix演化版是1977年推出的1BSD系统. 伯克利真正独立开发的Unix系统是于1979年推出的3BSD系统,支持虚拟内存. 1994年重写了虚拟内存子系统,推出了最终官方版,即4.4BSD. Unix内…
<Linux内核设计与实现>Chapter 3 读书笔记 进程管理是所有操作系统的心脏所在. 一.进程 1.进程就是处于执行期的程序以及它所包含的资源的总称. 2.线程是在进程中活动的对象. 3.进程提供两种虚拟机制:虚拟处理器和虚拟内存. 4.内核调度的对象是线程,而不是进程. 二.进程描述符及任务结构 内核把进程的列表存放在叫做任务队列的双向循环链表中.链表中的每一项都是类型为task_struct的进程描述符结构,该结构定义在<linux/sched.h>文件中. 1.分配进…
<Linux内核设计与实现>Chapter 1 读书笔记 一.Unix的特点 Unix从Multics中产生,是一个强大.健壮和稳定的操作系统. 特点 1.很简洁 2.在Unix系统中,所有的东西都当做文件对待.这种抽象使对数据和对设备的操作都是通过一套相同的系统调用借口来进行的:open(),read(),write(),lseek()和close() 3.Unix内核和相关的系统工具软件用C语言编写而成——该特点使其具备出色的平台可移植性 4.Unix进程创建非常快速简洁,目标在于一次执行…
<Linux内核设计与实现>Chapter 2 读书笔记 一.获取内核源码 1.使用Git 我们曾经在以前的学习中使用过Git方法 $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git 更新分支到Linux的最新分支 $ git pull 可以获取并随时保持与内核官方的代码树一致 2.安装内核源代码 压缩形式为bzip2 $ tar xvjf linux-x.y.z.tar.bz2 压缩…
<Linux内核设计与实现>Chapter 5 读书笔记 在现代操作系统中,内核提供了用户进程与内核进行交互的一组接口,这些接口的作用是: 使应用程序受限地访问硬件设备 提供创建新进程与已有进程进行通信的机制 提供申请操作系统其他资源的能力 一.与内核通信 1.系统调用的作用 系统调用在用户空间进程和硬件设备之间添加了一个中间层,作用是: 为用户空间提供了一种硬件抽象接口: 系统调用保证了系统的稳定和安全,即可以避免应用程序不正确地使用硬件设备,窃取其他进程的资源: 每个进程都运行在虚拟系统中…
<Linux内核设计与实现>Chapter 18 读书笔记 一.准备开始 一个bug 一个藏匿bug的内核版本 知道这个bug最早出现在哪个内核版本中. 相关内核代码的知识和运气 想要成功进行调试: 让这些错误重现 抽象出问题 从代码中搜索 二.内核中的bug 1.内核bug的表象: 错误代码 同步时发生的错误,例如共享变量锁定不当 错误的管理硬件 降低所有程序的运行性能 毁坏数据 使得系统处于死锁状态 …… 引用空指针会产生一个oops:垃圾数据会导致系统崩溃. 三.通过打印来调试 内核提供…
第十七章 设备与模块 关于设备驱动与设备管理,我们讨论四种内核成分. 设备类型 模块 内核对象 sysfs 17.1设备类型 在Linux以及所有Unix系统中,设备被分为以下三种类型: 块设备,块设备通常缩写为blkdev,它是可寻址的,寻址以块为单位,块大小随设备不同而不同:块设备通常支持重定位操作,也就是对数据的随机访问.块设备是通过称为"块设备节点"的特殊文件来访问,并且通常被挂载为文件系统. 字符设备,字符设备通常缩写为cdev,它是不可寻址的,仅提供数据的流式访问,就是一个…
第四章 进程调度 进程在操作系统看来是程序的运行态表现形式. 4.1多任务 多任务操作系统就是能同时并发地交互执行多个进程的操作系统. 多任务操作系统会使多个进程处于堵塞或者睡眠状态.这些任务尽管位于内存,但并不处于可运行状态.相反,这些进程利用内核堵塞自己,直到某一事件发生. 多任务系统可以划分为两类:非抢占式多任务和抢占式多任务. 强制的挂起动作就叫做抢占. 时间片实际上就是分配给每个可运行进程的处理器时间段. 4.2 linux的进程调度 O(1)调度程序 4.3策略 策略决定调度程序在何…
第三章 进程管理 3.1 进程 进程是处于执行期的代码.通常进程还要包含其他资源,像打开的文件.挂起的信号.内核的内部数据.处理器状态.一个或多个具有内存映射的内存地址空间及一个或多个执行线程,当然还包括用来存放全局变量的数据段等. 进程提供两种虚拟机制:虚拟处理器和虚拟内存. 通常,创建新的进程都是为了立即执行新的.不同的程序,而接着调用exec()这组函数就可以创建新的地址空间,并把新的程序载入其中. 3.2 进程描述符以及任务结构 内核把进程的列表存放在叫做任务队列(task list)的…
第七章 链接 链接(linking)是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或被拷贝)到存储并执行.链接可以执行于编译时(compile time),也就是在源代码被翻译成机器代码时:也可以执行于加载时(load time),也就是在程序被加载器(loader)加载到存储器并执行时:甚至执行于运行时(run time),由应用程序来执行. 理解链接器将帮助你构造大型程序. 理解链接器将帮助你避免一些危险的编程错误. 理解链接将帮助你理解语言的作用域规则是如何…
4.1多任务 多任务操作系统:同时并发地交互执行多个进程的操作系统 多任务操作系统会使多个进程处于堵塞或者睡眠状态.这些任务尽管位于内存,但是并不处于可运行状态.这些进程利用内核堵塞自己,直到某一事件发生. 多任务系统可以划分为两类:非抢占式和抢占式. 抢占:强制挂起. 时间片:分配给每个可运行进程的处理器时间段. 4.2 linux的进程调度 4.3策略 策略决定调度程序在何时让什么程序运行. 4.3.1I/O消耗型和处理器消耗型的进程 I/O消耗型:进程的大部分时间用来提交I/O请求或是等待…
进程管理 进程是处于执行期的程序以及相关的资源的总称,也称作任务.执行线程,简称线程,是在进程中活动的对象. 可以两个或两个以上的进程执行同一个程序 也可以两个或两个以上并存的进程共享许多资源 内核调度的对象是线程,而不是进程. 进程描述符及任务结构 内核把进程的列表存放在任务列表(task list)的双向循环链表中. 链表中每一项都是类型为task_struct的进程描述符的结构. 进程描述符中包含的数据能完整地描述一个正在执行的程序: 打开的文件 进程的地址空间 挂起的信号 进程的状态 m…
第十八章 调试 18.1准备开始 需要的只是: 一个确定的bug.大部分bug通常都不是行为可靠而且定义明确的. 一个藏匿bug的内核版本. 相关的内核代码的知识和运气. 18.2内核中的bug 内核中的bug多种多样,它们的产生可以有无数的原因,同时他们的表象也变化多端. 从隐藏在源代码中的错误到展现在目击者面前的bug,往往都是经历一系列连锁反应的事件才可能触发. 内核与其他大型的软件项目没有什么太大的不同. 内核有一些独特的问题需要考虑:例如定时限制和竞争条件等,它们都是允许多个线程在内核…
1.核心区域进程包括各种内存对象 种内存对象,比方: 1.可运行文件代码能够包括各种内存映射,称为代码段(text section). 2.可运行文件的已初始化全局变量的内存映射,称为数据段(data section). 3.包括未初始化全局变量,也就是bss段的零页(页面中的信息所有为0值,所以能够用于映射bss段等目的)的内存映射. 4.用于进程用户空间栈的内存映射. 5.每个诸如c库或动态链接程序等共享库的代码段.数据段和bss段也会被加载进程的地址空间. 6.不论什么内存映射文件. 7.…
<linux内核设计与实现>第一章 第一章Linux内核简介: 1.3操作系统和内核简介 操作系统:系统包含了操作系统和所有运行在它之上的应用程序.操作系统是指整个在系统中负责完成最基本功能和系统管理的那些部分.这些部分包括内核.设备驱动程序.启动应到程序.命令行shell或者其他种类的用户界面.基本的文件管理系统工具. 内核:如果说用户界面是操作系统的外在表像,那么内核就是操作系统的内在核心. 内核空间:系统态和保护起来的内存空间. 内核的组成: 1.中断服务程序(响应中断) 2.调度程序(…
第一章Linux内核简介 一.unix 1.Unix的历史 Unix是现存操作系统中最强大和最优秀的系统. ——1969年由Ken Thompson和Dernis Ritchie的灵感点亮的产物. ——1973年整个Unix操作系统用C语言进行重写,给后来unix广泛移植铺平道路. ——1977年伯克利推出第一个Unix演化版1BSD系统. ——1979年伯克利真正独立开发的Unix系统3BSD. 2.Unix的特点 简洁:仅提供几百个系统调用并有一个非常明确的设计目的. 抽象:在Unix中所有…
1. 设备类型 linux中主要由3种类型的设备,分别是: 设备类型 代表设备 特点 访问方式 块设备 硬盘,光盘 随机访问设备中的内容 一般都是把设备挂载为文件系统后再访问 字符设备 键盘,打印机 只能顺序访问(一个一个字符或者一个一个字节) 一般不挂载,直接和设备交互 网络设备 网卡 打破了Unix "所有东西都是文件" 的设计原则 通过套接字API来访问 除了以上3种典型的设备之外,还有"伪设备",即一些虚拟的设备,仅提供访问内核功能而已,没有物理设备与之关联…
第二章:从内核出发 2.1获取源代码 2.1.1使用git Git:内核开发者们用来管理Linux内核源代码的控制系统. 我们使用git来下载和管理Linux源代码. 2.1.2安装内核源代码(如果使用git的话就省去解压这一步) 背景知识:内核压缩有两种形式:GUNd的zip(gzip)和bzip2.其中bzip2是首选默认的首选模式. 如果是bzip2,则解压指令为: 如果是GUN的zip: (注意:x.y.z内核源代码的具体版本,解压后源代码位于linux-x.y.z目录下.) (源代码安…
1. 进程和线程 进程和线程是程序运行时状态,是动态变化的,进程和线程的管理操作都是由内核来实现的. Linux中的进程于Windows相比是很轻量级的,而且不严格区分进程和线程,线程不过是一种特殊的进程. 进程提供2种虚拟机制:虚拟处理器和虚拟内存 每个进程有独立的虚拟处理器和虚拟内存, 每个线程有独立的虚拟处理器,同一个进程内的线程有可能会共享虚拟内存. 内核中进程的信息主要保存在task_struct中(include/linux/sched.h) 进程标识PID和线程标识TID对于同一个…
1. 什么是系统调用 系统调用就是用户程序和硬件设备之间的桥梁. 用户程序在需要的时候,通过系统调用来使用硬件设备. 系统调用的存在意义: 1)用户程序通过系统调用来使用硬件,而不用关心具体的硬件设备,这样大大简化了用户程序的开发. 比如:用户程序通过write()系统调用就可以将数据写入文件,而不必关心文件是在磁盘上还是软盘上,或者其他存储上. 2)系统调用使得用户程序有更好的可移植性. 只要操作系统提供的系统调用接口相同,用户程序就可在不用修改的情况下,从一个系统迁移到另一个操作系统. 3)…
第五章 系统调用 20135307 张嘉琪 5.1 与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: 它为用户空间提供了一种硬件的抽象接口 系统调用保证了系统的稳定和安全,作为硬件设备和应用程序之间的中间人,内核可以基于权限.用户类型和其他一些规则对需要进行的访问进行裁决 在第3章中曾经提到过,每个进程都运行在虚拟系统中,而在用户空间和系统的其余部分提供这样一层公共接口,也是出于这种考虑,如果应用程序可以随意访问硬件而内核又对此一无所知的话几乎就没法实现多任…
第二章 从内核出发 一.获取内核源码 1.使用Git(linux创造的系统) 使用git来获取最新提交到linux版本树的一个副本: $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git 下载代码后,更新分支到Linux的最新分支: $ git pull 这两个命令可以获取并随时保持与内核官方的代码树一致. 2.安装内核源代码 压缩形式是bzip2,则运行: $ tar xvjf linu…
1. 什么是调度 现在的操作系统都是多任务的,为了能让更多的任务能同时在系统上更好的运行,需要一个管理程序来管理计算机上同时运行的各个任务(也就是进程). 这个管理程序就是调度程序,功能: 决定哪些进程运行,哪些进程等待 决定每个进程运行多长时间 此外,为了获得更好的用户体验,运行中的进程还可以立即被其他更紧急的进程打断. 总之,调度是一个平衡的过程.一方面,它要保证各个运行的进程能够最大限度的使用CPU(即尽量少的切换进程,进程切换过多,CPU的时间会浪费在切换上):另一方面,保证各个进程能公…
http://pan.baidu.com/s/1hqYAZNQ OneNote做的笔记没法儿带着格式一起导进来.所以上传到百度云,麻烦老师下载一下了. 下次不再用OneNote.…
<Linux内核设计与实现>课本第四章自学笔记 进程调度 By20135203齐岳 4.1 多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统.多任务操作系统使多个进程处于堵塞或者睡眠状态,实际不被投入执行,这些任务尽管位于内存,但是并不处于可运行状态. 多任务系统分为两种: 抢占式多任务:Linux提供了抢占式的多任务模式,由调度程序来决定什么时候停止一个进程的运行. 现代操作系统提供:动态时间片计算的方式:可配置的计算策略 非抢占式多任务:除非进程自己主动停止运行,否则会一直…
<Linux内核设计与实现>课本第三章自学笔记 进程管理 By20135203齐岳 进程 进程:处于执行期的程序.包括代码段和打开的文件.挂起的信号.内核内部数据.处理器状态一个或多个具有内存映射的内存地址空间或执行线程等其他资源. 线程:是在进程中活动的对象.每个线程都有一个独立的程序计数器.进程栈和一组进程寄存器.内核调度的对象是线程而非进程.操作系统中进程提供两种虚拟机制:虚拟存储器和虚拟内存. 程序:本身并不是进程,进程是处于执行期的程序以及相关的资源的总称.不同的进程可以执行同一个程…
<Linux内核设计与实现>课本第五章学习笔记 By20135203齐岳 与内核通信 用户空间进程和硬件设备之间通过系统调用来交互,其主要作用有三个. 为用户空间提供了硬件的抽象接口. 保证了系统的稳定和安全. 实现多任务和虚拟内存.保证良好的稳定性和安全性. 系统调用是用户空间访问内核的唯一手段:除异常和陷入外,是内核唯一合法的入口. API.POSIX和C库 应用程序通过在用户空间实现的应用编程接口(API)而非直接通过系统调用来编程. POSIX是应用编程接口的一个国际标准,C库提供了P…
第3章 进程管理 3.1 进程 1.进程 进程就是处于执行期的程序. 进程包括: 可执行程序代码 打开的文件 挂起的信号 内核内部数据 处理器状态 一个或多个具有内存映射的内存地址空间 一个或多个执行线程 用来存放全局变量的数据段 …… 实际上,进程就是正在执行的程序代码的实时结果 2.执行线程 简称线程,是在进程中活动的对象. 每个线程都拥有一个独立的程序计数器.进程栈和一组进程寄存器. 内核调度的对象是线程,而不是进程. 进程提供两种虚拟机制: 虚拟处理器和虚拟内存. 在线程之间可以共享虚拟…
一.获取内核源码 1. Git git实际上是一种开源的分布式版本控制工具. Linux作为一个开源的内核,其源代码也可以用git下载和管理 - 获取最新提交到版本树的一个副本 - $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git - 下载代码后,更新自己的分支到最新分支 - $ git pull 2.安装内核源代码 压缩形式为bzip2:$ tar xvjf linux-x.y.z.…