Linux内核学习笔记2】的更多相关文章

原创文章,转载请注明:Linux内核学习笔记-2.进程管理) By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert Love,陈莉君等译. 1.进程 进程是正在执行的程序代码的实时结果,包含打开的文件.挂起的信号等.线程是进程中的活动的对象,内核调度的对象是线程.在Linux内核对线程与进程并不加以区分,线程只不过是一种特殊的进程. 2.进程描述符 内核把进程的信息存放在task list的双向循环链表中,链表中的…
原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert Love,陈莉君等译. 1.操作系统和内核简介 Linux内核是自由公开软件,使用GNU的General Public License(GPL)第二版作为限制条款.大多数软件许可证决意剥夺你共享和修改软件的自由.相比之下,GNU通用公共许可证试图保证你共享和修改自由软件的自由. 通常一个内核负责响应中…
Linux内核学习笔记二——进程   一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器. 内核调度的对象是线程而不是进程.对Linux而言,线程是特殊的进程. 二 进程描述符及任务结构 内核使用双向循环链表的任务队列来存放进程,使用结构体task_struct来描述进程所有信息. 1 进程描述符task_struct struct task_struct {}结构体相当大,大约1.7…
王剑桥Linux内核学习笔记 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 计算机是如何工作的 个人理解:计算机就是通过和用户进行交互,执行用户的指令,这些指令存放在内存中,通过寄存器存储,堆栈变化,来一步步顺序执行. 一.存储程序计算机工作模型 1.冯诺依曼体系结构-存储程序计算机 硬件角度(主板):通过cpu中IP寄存器指向一个代码段运行某些指令: 寄存区,指向内存的某一块区域(代码段) IP:16位cp…
转自:http://blog.csdn.net/mumufan05/article/details/45803219 学习笔记与个人理解,如有错误,欢迎指正. 温馨提示:建议跟着注释中的编号顺序阅读代码 测试方法:cat /proc/abc_proc echo 任意字符串 >/proc/abc_pro(需root权限) /************************************************* 使用seq_file接口实现可读写proc文件的例子 适用于3.10以后的内…
1.vanbreaker的专栏 2.LinuxKernel Exploration 3.DroidPhone的专栏 4.Linux内核研究以及学习文档和ARM学习以及研究的开放文档   [力荐] 5.Linux内核之旅 6.时钟管理系统和中断子系统 7. http://www.cnblogs.com/bastard/category/412387.html…
20135316王剑桥 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC 1000029000 1.内核态:在高执行级别,代码可以执行特权指令,访问任意的物理地址,这种CPU执行级别就对应着内核态.而在相应的低级别执行状态下,代码的掌控范围会受到限制.只能在对应级别允许的范围内活动.从而保证真个系统更稳定. 2.Intel x86的CPU有四种不同执行级别0-3,Linux只使用其中的0和3来分别表示内核态和用户态. 3.Cs寄存器的…
一 页 内核把物理页作为内存管理的基本单位:内存管理单元(MMU)把虚拟地址转换为物理 地址,通常以页为单位进行处理.MMU以页大小为单位来管理系统中的也表. 32位系统:页大小4KB 64位系统:页大小8KB 内核用相应的数据结构表示系统中的每个物理页: <linux/mm_types.h> struct page {} 内核通过这样的数据结构管理系统中所有的页,因此内核判断一个页是否空闲,谁有拥有这个页 ,拥有者可能是:用户空间进程.动态分配的内核数据.静态内核代码.页高速缓存…… 系统中…
1.用户和用户组 每个用户是一个或多个用户组的一名成员,组由唯一的用户组标识符(user group ID)标识.每个文件的相关权限也恰好与一个组相对应. root为超级用户, 2.模块 为了达到微内核理论上的很多优点而又不影响性能, Linux内核提供了模块(module).模块是一个目标文件,其代码可以在运行时链接到内核或从内核解除链接.这种目标代码通常由一~组函数组成,用来实现文件系统.驱动程序或其他内核上层功能.与微内核操作系统的外层不同,模块不是作为一个特殊的进程执行的.就向是一个静态…
20135316王剑桥 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC 1000029000 三个法宝:存储程序计算机.函数调用堆栈.中断. 两把宝剑:中断上下文和进程上下文切换. 内核启动相关代码基本都在init目录下. Linux内核的核心代码在kernel目录中. -S:在CPU开始运行之前将其冻结: -s:如果不想使用1234端口,泽可以使用-gdb tcp:xxxx来代替. 重点理解相关目录内容 arch/ 该目录中包含和…
一.完全公平调度算法 完全公平调度 CFS 的出发点基于一个简单的理念:进程调度的效果应该如同系统具备一个理想中的完美多任务处理器.在这种系统中,每个进程能够获得 1/n 的处理器时间(n 为可运行进程数).同时,我们可以调度给它们无限小的时间周期,所以,在任何可测量周期内,我们给予 n 个进程中每个进程同样多的运行时间. 但是,上述模型并不现实,因为我们无法再一个处理器上真的同时运行多个进程.而且,如果每个进程运行无限小的时间周期也并不高效(调度时的进程抢占会带来一定的代价).因此,虽然我们希…
Linux 中采用了两种不同的优先级范围,一种是 nice 值,一种是实时优先级.在上一篇粗略的说了一下 nice 值和实时优先级,仍有不少疑问,本文来详细说明一下进程优先级.linux 内核版本为 linux 2.6.34 . 进程优先级的相关信息,存放在进程描述符 task_struct 中: struct task_struct { ... int prio, static_prio, normal_prio; unsigned int rt_priority; ... } 可以看到,有四…
进程调度程序是多任务操作系统的基础,它是确保进程能有效工作的一个内核子系统,负责决定哪个进程投入运行.何时运行以及运行多长时间.只有通过进程调度程序的合理调度,系统资源才能够最大限度地发挥作用,多进程才会有并发执行的效果.在一组处于可运行状态的进程中选择一个来执行,是调度程序所需完成的基本工作. 在前期的 Linux 版本中,Linux 的调度程序都相当简陋,设计近乎原始,虽然容易理解,但是在可运行进程多或者多处理器的环境下都难以胜任.在 Linux2.5 系列内核中,开始采用一种叫做 O(1)…
进程调用 exit() 退出执行后,被设置为僵死状态,这时父进程可以通过 wait4() 系统调用查询子进程是否终结,之后再进行最后的操作,彻底删除进程所占用的内存资源. wait4() 系统调用由 linux 内核实现,linux 系统通常提供了 wait().waitpid().wait3().wait4() 这四个函数,四个函数的参数不同,语义也有细微的差别,但是都返回关于终止进程的状态信息. 1.wait() 函数: wait() 函数的原型是: #include <sys/types.…
一.进程与线程 进程是处于执行期的程序,但是并不仅仅局限于一段可执行程序代码.通常,进程还要包含其他资源,像打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存地址空间及一个或多个执行线程,当然还包括用来存放全局变量的数据段等.在Linux内核中,进程也通常叫做任务. 执行线程,简称线程,是在进程中活动的对象.每个线程都拥有一个独立的程序计数器.进程栈和一组进程寄存器.内核调度的对象是线程,而不是进程.在传统的UNIX系统中,一个进程只包含一个线程,但在现在的系统中,包…
一 内核组成部分 内核是一个操作系统的核心,主要由五个部分组成:进程调度,内存管理,虚拟文件系统,网络结构,进程间通信. 1.进程调度(SCHED) 控制进程对CPU的访问.当需要选择下一个进程运行时,由调度程序选择最值得运行的进程.可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其他资源,则该进程是不可运行进程.Linux使用了比较简单的基于优先级的进程调度算法选择新的进程. 2.内存管理(MM) 允许多个进程安全的共享主内存区域.Linux的内存管理支持虚拟内存,即在计算机中运行…
1什么是系统调用 系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口.用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件.关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等. 从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口——它好比一个中间人,把用户进程的请求传达给内核,待内核把请求处理完毕后再将处理结果送回给用户空间. 系统服务之所以需要通过系统调用来提供给用户空间的根本原…
第五章  定时测量 内核必须显式地与三种时钟打交道:实时时钟(Real Time Clock, RTC).时间标记计数器(Time Stamp Counter, TSC)及可编程间隔定时器( ProgrammableIntervalTimer,PIT).前两种硬件设备允许内核跟踪当前的时间;后一种设备由内核编程,以使它能以固定的.预先定义的频率发出中断.对于内核和用户程序使用的定时器来说,这样的周期性巾断是至关重要的. 实时时钟: 所有的PC都包含了一个叫实时时钟(RTC)的时钟.它是独立于CP…
第四章 中断和异常 中断通常被分为同步中断和异步中断,同步中断是当指令执行时由CPU控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后CPU才会发出中断异步中断是由其他硬件设备依照CPU时钟信号随机产生的.分别称为异常和中断,用中断信号指两者. 中断或异常处理执行的代码不是一个进程,而是内核控制路径,中断满足尽快处理完.允许中断嵌套.临界区禁止 Intel文挡把中断和异常分为以下几类:中断: 可屏蔽中断被送到微处理器的INTR引脚.通过清eflag寄存器的IF标志关闭中断.所有I/O…
第三章 进程 可以看到很多熟悉的结构体 进程状态: 可运行状态(TASK_ RUNNING) 进程要么在CPU上执行,要么准备执行. 可巾断的等待状态(TASK_ INTERRUPTIBLE) 进程被挂起(睡眠),直到一些条件变为真,这些条件包括:产生-个硬件巾断,释放进程正等待的系统资源,或传递一个信号,它们都能唤醒进程,即让进程的状态回到TASK RUNNING. 不可中断的等待状态(TASK_ _UNINTERRUPTIBLE) 与前一一个状态类似,但有一个例外,把信号传递到睡眼的进程不能…
第二章 :内存寻址 略.基本同计算机组成原理中的讲述 内核代码和数据结构会存储在一个保留的页框中. 常规Linux安装在RAM物理地址0x00100000开始的地方.因为:页框0是由BIOS使用,存放加电自测期间检查到的硬件配置:0x000a0000-0x000fffff的范围被留在BIOS程序使用,(并映射到ISA显示卡上的存储器).给BIOS或硬件设备保留的第一个物理地址对应的线性地址保存在i386_endbase中(0x0009f000) 关于进程的页表: 从0x00000000到PAGE…
一. 进程创建: Unix 下的进程创建很特别,与许多其他操作系统不同,它分两步操作来创建和执行进程: fork() 和 exec() .首先,fork() 通过拷贝当前进程创建一个子进程:然后,exec() 函数负责读取可执行文件并将其载入地址空间开始运行. 1.fork() :kernel/fork.c 在Linux系统中,通过调用fork()来创建一个进程.调用 fork() 的进程称为父进程,新产生的进程称为子进程.在该调用结束时,在返回点这个相同的位子上,父进程恢复执行,子进程开始执行…
Linux系统中,进程之间有一个明显的继承关系,所有进程都是 PID 为1的 init 进程的后代.内核在系统启动的最后阶段启动 init 进程.该进程读取系统的初始化脚本(initscript)并执行其他的相关程序,最终完成系统启动的整个过程. 系统中每个进程必有一个父进程,相应的,每个进程也可以由零个或者多个子进程.拥有同一个父进程的所有进程被称为兄弟.进程之间的关系存放在进程描述符 task_struct 中.每个 task_struct 都包含一个指向其父进程 task_struct 的…
第八章 系统调用 API定义了一个给定的服务:系统调用是通过软中断向内核发出一个明确的请求. API可能不调用系统调用,也可能调用多个系统调用. Linux系统调用必须通过执行int 0x80,系统调用时用户态切换到内核态. 使用eax传递系统调用号.返回值0为成功,负数为程序错误码. System_call()函数会检查current的flags域是否包含PF_TRACESYS为1,即是否在被跟踪执行.如果是,system_call()在系统调用服务例程执行之前,和之后调用syscall_tr…
概念: ①硬链接:若一个 inode 号对应多个文件名,则称这些文件为硬链接.即硬链接就是同一个文件使用了多个别名.硬链接可由命令 link 或 ln 创建. 其特性: 文件有相同的 inode 及 data block: 只能对已存在的文件进行创建: 不能交叉文件系统进行硬链接的创建: 不能对目录进行创建,只可对文件创建: 删除一个硬链接文件并不影响其他有相同 inode 号的文件. ②软连接:若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接.软链接就是一个普通文件,只…
转自: http://www.linuxidc.com/Linux/2011-09/43194.htm 看UNIX相关的书时经常能遇到这几个概念,但一直没有好好去理清这几个概念,以致对这几个概念一直一知半解.今天好好区分了一下这几个概念并总结如下.说白了这几个UID引出都是为了系统的权限管理. 下面分别用RUID, EUID,SUID来表示实际用户ID,有效用户ID,设置用户ID.另外用户ID是个整型数,为了说明方便真接使用了用户名来代表不同的UID.先解释一下这几个ID的作用: RUID, 用…
http://www.cnblogs.com/bastard/category/412387.html…
一 分段机制 1.什么是分段机制 分段机制就是把虚拟地址空间中的虚拟内存组织成一些长度可变的称为段的内存块单元. 2.什么是段 每个段由三个参数定义:段基地址.段限长和段属性. 段的基地址.段限长以及段的保护属性存储在一个称为段描述符的结构项中. 3.段的作用  段可以用来存放程序的代码.数据和堆栈,或者用来存放系统数据结构. 4.段的存储地址 系统中所有使用的段都包含在处理器线性地址空间中. 5.段选择符 逻辑地址包括一个段选择符或一个偏移量,段选择符是一个段的唯一标识,提供了段描述符表,段描…
存储程序计算机模型 冯诺依曼体系结构 冯诺依曼体系结构是存储程序计算机,什么叫存储程序计算机?从硬件角度说,假设有cpu和内存,两者通过总线连接,在cpu内部有一个寄存器叫ip(instruction pointer),即X86型CPU中的指令指针寄存器(相当于ARM型CPU中的程序计数器PC).ip总是指向内存中的代码段,然后cpu从ip指向的区域取出一条指令,并且执行该指令,然后ip自动加1,指向紧邻的下一条指令,cpu取出该指令并执行,然后ip再自动加1,cpu再执行...这样,程序代码存…
由于用的学习材料是<linux设备驱动开发详解(第二版)>,所以linux驱动学习笔记大部分文字描述来自于这本书,学习笔记系列用于自己学习理解的一种查阅和复习方式. #make config(基于文本的最为传统的配置界面,不推荐使用)#make menuconfig(基于文本菜单的配置界面)#make xconfig(要求 QT 被安装)#make gconfig(要求 GTK+被安装)在配置 Linux 2.6 内核所使用的 make config. make menuconfig. mak…