Linux内核设计与实现  读书笔记: http://www.cnblogs.com/wang_yb/tag/linux-kernel/ <深入理解LINUX内存管理> http://blog.csdn.net/yrj/article/category/718110 Linux内存管理和性能学习笔记(一) :内存测量与堆内存  第一篇 内存的测量 2.1. 系统当前可用内存 # cat /proc/meminfoMemTotal:        8063544 kBMemFree:      …
第三章 进程管理 1. fork系统调用从内核返回两次: 一次返回到子进程,一次返回到父进程 2. task_struct结构是用slab分配器分配的,2.6以前的是放在内核栈的栈底的:所有进程的task_struct连在一起组成了一个双向链表 3. 2.6内核的内核栈底放的是thread_info结构,其中有指向task_struct的指针: 4. current宏可以找到当前进程的task_struct:X86是通过先找到thread_info结构,而PPC是有专门的寄存器存当前task_s…
转自:http://blog.chinaunix.net/uid-10469829-id-2953001.html 1.原子操作可以保证指令以原子的方式执行——执行过程不被打断.内核提供了两组原子操作接口,一组针对整数进行操作,一组针对单独的位进行操作.       2.针对整数的原子操作只能对atomic_t类型的数据进行处理.引入这个特殊数据类型主要是出于三个原因:首先,让原子函数只接受atomic_t类型的操作数可以确保原子操作只与这种特殊类型的数据一起使用.同时这也保证了该类型的数据不会…
1.进程: (1)处于执行期的程序,但不止是代码,还包括各种程序运行时所需的资源,实际上进程是正在执行的 程序的实时结果. (2)程序的本身并不是进程,进程是处于执行期的程序及其相关资源的总称. (3)两个或两个以上并存的进程可以共享诸如打开的文件,地址空间等共享资源. (4)在Linux中通常是调用fork()系统函数的结果,通过复制一个现有的进程来创建一个新的子进程. fork()系统函数 (5)fork在这个系统调用结束时,在同一位置上返回两次(从内核返回两次),父进程恢复运行,子进程开始…
内核:有的时候被称管理者或者操作系统核心,通常内核负责响应中断的中断服务程序, 负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址空间德内存管理程序 和网络,进程间通信等系统服务程序共同组成.…
<Linux内核设计与实现>读书笔记--第一二章 20135301张忻 估算学习时间:共2小时 读书:1.5 代码:0 作业:0 博客:0.5 实际学习时间:共2.5小时 读书:2.0 代码:0 作业:0 博客:0.5 耗时估计的公式:Y=X+X/N ,Y=X-X/N 第一章 Linux内核简介 1.1 Unix的历史 由于Unix系统设计简洁并且在发布时提供源代码,所以许多其他组织和团体都对它进了进一步的开发. Unⅸ虽然已经使用了40年,但计算机科学家仍然认为它是现存操作系统中最强大和最优…
内核简介  本篇简单介绍内核相关的基本概念. 主要内容: 单内核和微内核 内核版本号 1. 单内核和微内核   原理 优势 劣势 单内核 整个内核都在一个大内核地址空间上运行. 1. 简单.2. 高效:所有内核都在一个大的地址空间上,所以内核各个功能之间的调用和调用函数类似,几乎没有性能开销. 一个功能的崩溃会导致整个内核无法使用. 微内核 内核按功能被划分成各个独立的过程.每个过程独立的运行在自己的地址空间上. 1. 安全:内核的各种服务独立运行,一种服务挂了不会影响其他服务. 内核各个服务之…
第一章 Linux内核简介 1. Unix的历史 Unⅸ虽然已经使用了40年,但计算机科学家仍然认为它是现存操作系统中最强大和最优秀的系统. Unix强大的根本原因: 简洁 在Unix中所有的东西都被当做文件对待 Unix的内核和相关的系统工具软件是用C语言编写的——正是这个特点使得Unix在各种硬件体系架构面前都具备令人惊异的移植能力 Unix的进程创建非常迅速,并且有一个非常独特的fork()系统调用 Unix提供了一套非常简单但又很稳定的进程间通讯元语,使得Unix的程序把目标放在一次执行…
3.1 进程 处于执行期的程序. 进程就是正在执行的程序代码的实时结果.内核需要有效而又透明地管理所有细节. 执行线程(简称线程):在进程中活动的对象.每个线程都拥有一个独立的程序计数器.进程栈和一组进程寄存器. 内和调度的对象是线程,而不是进程. 进程提供两种虚拟机制:虚拟处理器和虚拟内存. 3.2 进程描述符及任务结构 Linux通过slab分配器分配task_struct结构. 每个任务的thread_info结构在它的内核栈的尾端分配.结构中task域中存放的是指向该任务实际task_s…
第三章  进程管理 姓名:王玮怡  学号:20135116 一.进程 1.进程的含义 进程是处于执行期的程序以及相关资源的总称,程序本身并不是进程,实际上就是正在执行的代码的实时结果.Linux内核通常把进程也叫“任务”. 2.线程的含义 执行线程简称线程,是在进程中互动的对象.内核调度的对象是线程而不是进程.Linux系统不区分线程和进程,线程只是一种特殊的进程. 3.进程的执行过程 (1)clone()调用fork(),通过复制一个现有进程来创建一个全新的进程,进程开始存活.其中调用fork…
一.进程 1.进程就是处于执行期的程序(目标码存放在某种存储介质上).但进程并不仅仅局限于一段可执行程序代码,通常进程还要包含其他资源.执行线程,简称线程(thread),是在进程中活动的对象. 2.每个线程都拥有一个独立的程序计数器.进程技和一组进程寄存器. 3.内核调度的对象是线程,而不是进程.对Linux 而言,线程是一种特殊的进程. 4.在现代操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存. 5.程序本身并不是进程,进程是处于执行期的程序以及相关的资源的总称. 6.Linux 系…
linux中管道符"|"的作用 命令格式:命令A|命令B,即命令1的正确输出作为命令B的操作对象(下图应用别人的图片) 1. 例如: ps aux | grep "test"  在 ps aux中的結果中查找test. 2. 例如:   find . -name "*.txt" | xargs grep "good" -n --color=auto   把find的结果当成参数传入到grep中,即在那些文件内部查找good关键…
系统调用 内核提供了用户进程和内核交互的接口,使得应用程序可以受限制的访问硬件设备. 提供这些接口主要是为了保证系统稳定可靠,避免应用程序恣意妄行. 一.内核通信 系统调用在用户空间进程和硬件设备之间添加中间才能.作用有三: 为用户空间提供一种硬件的抽象接口.无需理会物理结构是怎么样的. 系统调用保证了系统的稳定和安全.内核可以有选择的对其访问进行控制. 每个进程都运行在虚拟系统中,用户空间和系统的其余部分提供这样一层公共接口. 二.API.POSIX和C库 API:应用程序不需要访问内核,编程…
第一章 Linux内核简介 1.Unix (1)Unix系统很简洁 (2)在Unix中,所以东西都被当作文件对待,通过一套相同的系统调用接口来进行:open(),read(),write(),lseek(),close() (3)用C语言编写而成,移植能力强 (4)进程创建迅速,有fork()系统调用 (5)提供了一套非常简单但很稳定的系统元语 目标:一次执行保质保量完成一个任务 2.Linux 没有抛弃Unix的设计目标并且保证了应用程序编程接口的一致 Linux是一个非商业化产品 Linux…
第三章 (由于linux不区分进程和线程,所以它们在linux中被称为task,也叫任务) 总结:本章主要包括进程以及线程的概念和定义,Linux内核如何管理每个进程,他们在内核中如何被列举,如何创建,最终如何消亡.操作系统存在的意义在于运行用户程序,进程管理是所有操作系统的心脏所在. 3.1进程 进程是处于执行期的程序,是正在执行的程序代码的实时结果.但不仅局限于一段可执行的代码,还包括其他资源(打开的文件,挂起的信号,内核内部数据,处理器的状态,一个或者多个内存映射的内存地址空间,一个或者多…
一.Linux内核相对于传统的UNIX内核的比較: (1):Linux支持动态内核模块. 虽然Linux内核也是总体式结构,但是同意在须要的时候动态哦卸除(rmmod xxx)和载入内核模块(insmod  xxx.ko). (2):Linux支持对称多处理(SMP)机制,虽然很多UNIX的变体也支持SMP.可是传统的UNIX并不支持这样的机制. (3):Linux内核能够抢占(preemptive).在Linux 2.4以及曾经的版本号都是不支持内核抢占的.在Linux 2.6以及以后就支持了…
页高速缓存是Linux内核实现磁盘缓存.磁盘告诉缓存重要源自:第一,访问磁盘的速度要远远低于访问内存. 第二,数据一旦被访问,就很有可能在短期内再次被访问到.这种短时期内集中访问同一片数据的原理称作临时局部原理. 一.缓存手段 1.1 写缓存 通常来讲缓存一般实现成三种策略: ①不缓存 ②写操作将自动更新内存缓存 ③Linux采用的回写.程序写进缓存 1.2 缓存回收 1.最近少用原则:简称LRU,LRU回收需要跟踪每个页面的访问踪迹,以便能回收最老时间戳的页面. 2.双链策略:Linux实现的…
一.地址空间 进程地址空间由进程可寻址的虚拟内存组成,内核允许进程使用这种虚拟内存中的地址. 每个进程都有一个32位或64位的平坦地址空间,空间的具体大小取决于体系结构.“平坦”指的是地址空间范围是一个独立的连续区间. 现代采用虚拟内存的操作系统通常都使用平坦地址空间而不是分段式的内存模式. 一个进程的地址空间与另一个进程的地址空间即使有相同的内存地址,实际上也彼此互不相干.这样的进程为线程. 一个进程可以寻址4GB虚拟内存(32位地址空间中),但这不代表能访问所有虚拟地址.可以被合法访问的地址…
一.原子操作 原子操作可以保证指令以原子的方式执行----执行过程不被打断. 1.1 原子整数操作 针对整数的原子操作只能对atomic_t类型的数据进行处理. 首先,让原子函数只接收atomic_t类型的操作数,可以确保原子操作只与这种特殊类型数据一起使用,并且不会被其他人使用. 使用atomic_t类型确保编译器不对,相应的值进行访问优化. 在不同体系结构上实现原子操作的时候,使用atomic_t可以屏蔽其间的差异 atomic_t类型定义在文件<linux/types.h> 中 type…
上半部分的中断处理有一些局限,包括: 中断处理程序以异步方式执行,并且它有可能打断其他重要代码的执行. 中断会屏蔽其他程序,所以中断处理程序执行的越快越好. 由于中断处理程序往往需要对硬件进行操作,所以它们通常又很高的时限要求. 中断处理程序不在进程上下文中运行,所以它们不能阻塞.这限制它们所做的事情. 一.下半部 下半部的任务就是执行与中断处理密切相关但中断处理程序本身不执行的工作. 中断处理程序会异步执行并且在最好的情况下也会锁定当前的中断线. 如果一个任务对时间非常敏感,将其放在中断处理程…
内核数据结构 Linux内核实现了这些通用数据结构,而且提倡大家在开发时重用. 内核开发者应该尽可能地使用这些数据结构,而不要自作主张的山寨方法. 通用的数据结构有以下几种:链表.队列.映射和二叉树 一.链表 1.1 单向链表和双向链表 链表是Linux中最简单.最普通的数据结构. 最简单的数据结构表示一个链表: /* 一个链表中的一个元素 */ struct list_element { void *data; /* 有效数据 */ struct list_element *next; /*…
一.Linux内核中的一些基本概念 内核空间:内核可独立于普通应用程序,它一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限.这种系统态和被保护起来的内存空间,称为内核空间. 进程上下文:当应用程序执行一条系统调用,通过系统调用运行在内核空间,而内核被称为运行在进程上下文中. 当你开发内核代码时,有一个重要的论坛是linux kernel mailing list(常缩写为lkml),你可以在http://vger.kernel.org上订阅邮件. 二.内核的一些常用的准备和操作 2.…
Linux内核通用队列实现 Kfifo位置:kernel/kififo.c 使用需要包含头文件#include <kernel/kififo> 1.创建队列(动态创建)int kfifo_alloc(struct kififo *fifo , unsigned int size , gfp_t gfp_mask);该函数会创建并初始化一个大小为size的fifo,内核使用gfp_mask标识分配队列.成功返回0ep :  struct kfifo fifo ;  int ret ;  //创建…
第十七章 设备与模块 关于设备驱动和设备管理,四种内核成分 设备类型:在所有unix系统中为了统一普通设备的操作所采用的分类 模块:Linux内核中用于按需加载和卸载目标代码的机制 内核对象:内核数据结构中支持面向对象的简单操作,还支持维护对象之间的父子关系 sysfs:系统中设备树的一个文件系统 17.1 设备类型 块设备 可寻址的,寻址以块为单位,块的大小随设备的不同而不同.块设备通常支持重定位操作,也就是对数据的随机访问 字符设备 不可寻址,仅提供数据的流式访问,就是一个个字符或字节.与块…
陈巧然原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002900 实验目的 使用gdb跟踪sys_execve内核函数的处理过程,分析exec*函数对应的系统调用处理过程,理解Linux内核如何装载和启动一个可执行程序. 实验过程 登陆实验楼虚拟机http://www.shiyanlou.com/courses/195 打开shell终端,执行以下命令: cd LinuxKernel rm -rf…
一.进程(任务)描述 1.进程是处于执行期的程序:除了可执行程序代码,还包括打开的文件.挂起的信号.内核内部数据.一个或者多个执行线程等多种资源 线程是在进程活动中的对象:内核调度的对象是线程而不是进程 在Linux系统中,并不区分线程和进程 可能存在两个或者多个进程执行的是同一个程序:甚至N个进程共享打开的文件.地址空间之类的资源 2.在现代操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存 同一进程中的线程之间可以共享虚拟内存,但是每个都拥有自己的虚拟存储器 3.进程概述 新创建的进程调…
进程管理 进程:处于执行期的程序. 线程:在进程中活动的对象 虚拟机制 虚拟处理器:多个进程分享一个处理器 虚拟内存:多个线程共享虚拟内存 一.进程描述符和任务结构 进程存放在双向循环链表中(队列),链表中的项为task_struct,称为进程描述符.在头文件<linux/sched.h>中. struct task_struct { volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ void *stack;…
模块 1.概念:  如果让LINUX Kernel单独运行在一个保护区域,那么LINUX Kernel就成为了“单内核”.    LINUX Kernel是组件模式的,所谓组件模式是指:LINUX Kernel在运行时,允许“代码”动态的插入或者移出Kernel.    所谓模块是指:相关的一些子程序,数据.入口点和出口点共同组合成的一个单一的二进制映像,也就是一个可装载的Kernel目标文件.    模块的支持,使得系统可以拥有一个最小的内核映像,并且通过模块的方式支持一些可选的特征和驱动程序…
内核里的内存分配不像其他地方分配内存那么容易,内核的内存分配不能简单便捷的使用,分配机制也不能太复杂. 一.页 内核把页作为内存管理的基本单位,尽管处理器最小寻址坑是是字或者字节.但是内存管理单元MMU通常以页为单位进行处理. 从虚拟内存的角度来看,页就是最小单位.大多数32位系统支持4KB的页,而64位系统结构一般会支持8KB的页. 内核用struct page结构表示系统中每个物理页,在<linux/mm_types.h>中 struct page { unsigned long flag…
时间管理在内核中占用非常重要的地位,内核中有大量的函数都需要基于时间驱动的,内核对相对时间和绝对时间都非常需要. 一.内核中的时间概念 内核必须在硬件的帮助下才能计算和管理时间,系统定时器以某种频率自行触发(击中hitting或者射中popping)时钟中断,该频率可以通过编程预定,称作节拍率. 因为预编的节拍率对内核来说是可知的,所以内核知道连续两次时钟中断的间隔时间,这个间隔时间称为节拍(tick),它等于节拍率分之一. 下面是利用时间中断周期执行的工作: 更新系统运行时间 更新实际时间 在…