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:      …
<Linux内核设计与实现>课本第五章学习笔记 By20135203齐岳 与内核通信 用户空间进程和硬件设备之间通过系统调用来交互,其主要作用有三个. 为用户空间提供了硬件的抽象接口. 保证了系统的稳定和安全. 实现多任务和虚拟内存.保证良好的稳定性和安全性. 系统调用是用户空间访问内核的唯一手段:除异常和陷入外,是内核唯一合法的入口. API.POSIX和C库 应用程序通过在用户空间实现的应用编程接口(API)而非直接通过系统调用来编程. POSIX是应用编程接口的一个国际标准,C库提供了P…
第五章系统调用 系统调用是用户进程与内核进行交互的接口.为了保护系统稳定可靠,避免应用程序恣意忘形. 5.1与内核通信 系统调用在用户空间进程和硬件设备间添加了一个中间层, 作用:为用户空间提供了一种硬件的抽象接口:保证了系统的稳定和安全,避免应用程序不正确使用硬件,窃取其他进程的资源,或做出危害系统的行为:为了实现多任务和虚拟内存. Linux提供的系统调用比大部分操作系统少得多. 5.2 API.POSIX.和C库 一个API定义了一组应用程序使用的编程接口.(API和系统调用不是一一对应)…
第三章 进程管理 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…
第5章 系统调用 操作系统提供接口主要是为了保证系统稳定可靠,避免应用程序恣意妄行. 5.1 与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中间层. 该层主要作用有三个: 为用户空间提供了一种硬件的抽象接口. 系统调用保证了系统的稳定和安全 每个进程都运行在虚拟系统中,而在用户空间和系统的其余部分提供这样一层公共接口. 5.2 API.POSIX和C库 1.API可以在各种不同的操作系统实现,给应用程序提供完全相同的接口,而它们本身在这些系统上的实现却可能迥异. 2.在Unix世界中…
一.Linux内核中的一些基本概念 内核空间:内核可独立于普通应用程序,它一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限.这种系统态和被保护起来的内存空间,称为内核空间. 进程上下文:当应用程序执行一条系统调用,通过系统调用运行在内核空间,而内核被称为运行在进程上下文中. 当你开发内核代码时,有一个重要的论坛是linux kernel mailing list(常缩写为lkml),你可以在http://vger.kernel.org上订阅邮件. 二.内核的一些常用的准备和操作 2.…
转自: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在这个系统调用结束时,在同一位置上返回两次(从内核返回两次),父进程恢复运行,子进程开始…
内核:有的时候被称管理者或者操作系统核心,通常内核负责响应中断的中断服务程序, 负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址空间德内存管理程序 和网络,进程间通信等系统服务程序共同组成.…
在使用共享内存的应用程序中,程序员必须特别留意保护共享资源,防止共享资源并发访问. 一.临界区和竞争条件 1.1 临界区和竞争条件 所谓临界区就是访问和操作共享数据代码段.多个执行线程并发访问同一个资源通常是不安全的,为了避免在临界区中并发访问,编程者必须保证这些代码原子地执行. 如果两个执行线程有可能处于同一个临界区中同时执行,如果这种情况确实发生了,我们就称它是竞争条件.因为竞争引起的错误非常不易重现,所以调试这种错误才会非常困难. 避免并发和防止竞争条件称为同步. 为什么要保护? 有些事务…
<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内核设计与实现>读书笔记--第五章 标签(空格分隔): 20135321余佳源 第五章 系统调用 操作系统中,内核提供了用户进程与内核进行交互的一组接口.这些接口让应用程序受限的访问硬件设备,提供了新进程与已有进程进行通信的机制,也提供了申请操作系统其他资源的能力.提供接口主要是为了保证系统稳定可靠,避免应用程序恣意妄行. 使应用程序受限地访问硬件设备 提供创建新进程与已有进程进行通信的机制 提供申请操作系统其他资源的能力 知识点回顾: 系统调用:需要int 0x80模拟中断让硬件…
内核简介  本篇简单介绍内核相关的基本概念. 主要内容: 单内核和微内核 内核版本号 1. 单内核和微内核   原理 优势 劣势 单内核 整个内核都在一个大内核地址空间上运行. 1. 简单.2. 高效:所有内核都在一个大的地址空间上,所以内核各个功能之间的调用和调用函数类似,几乎没有性能开销. 一个功能的崩溃会导致整个内核无法使用. 微内核 内核按功能被划分成各个独立的过程.每个过程独立的运行在自己的地址空间上. 1. 安全:内核的各种服务独立运行,一种服务挂了不会影响其他服务. 内核各个服务之…
<Linux内核设计与实现>课本第四章自学笔记 进程调度 By20135203齐岳 4.1 多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统.多任务操作系统使多个进程处于堵塞或者睡眠状态,实际不被投入执行,这些任务尽管位于内存,但是并不处于可运行状态. 多任务系统分为两种: 抢占式多任务:Linux提供了抢占式的多任务模式,由调度程序来决定什么时候停止一个进程的运行. 现代操作系统提供:动态时间片计算的方式:可配置的计算策略 非抢占式多任务:除非进程自己主动停止运行,否则会一直…
<Linux内核设计与实现>课本第三章自学笔记 进程管理 By20135203齐岳 进程 进程:处于执行期的程序.包括代码段和打开的文件.挂起的信号.内核内部数据.处理器状态一个或多个具有内存映射的内存地址空间或执行线程等其他资源. 线程:是在进程中活动的对象.每个线程都有一个独立的程序计数器.进程栈和一组进程寄存器.内核调度的对象是线程而非进程.操作系统中进程提供两种虚拟机制:虚拟存储器和虚拟内存. 程序:本身并不是进程,进程是处于执行期的程序以及相关的资源的总称.不同的进程可以执行同一个程…
<Linux内核设计与实现>第一.二章学习笔记 姓名:王玮怡  学号:20135116 第一章 Linux内核简介 一.关于Unix ——一个支持抢占式多任务.多线程.虚拟内存.换页.动态链接和TCP/IP网络的现代化操作系统 1.主要发展过程   1969年,贝尔实验室的程序员们设计了一个文件系统原型,最终发展演化成了Unix 1971年,Unix被移植到PDP-11型机中 1973年,整个Unix系统使用C语言进行重写,为后来Unix系统的广泛移植铺平了道路 Unix第六版(V6)被贝尔实…
第一章 Linux内核简介 (一)Unix是一个强大.健壮和稳定的操作系统,特点是: Unix很简洁,仅仅提供几个几百个系统调用并且有一个非常明确的设计目的 在Unix中,所有的东西都被当作文件对待,通过一套相同的系统调用接口来进行:open(),read(),write(),lseek(),close() Unix的内核和相关的系统工具软件是用C语言编写而成 Unix的进程创建非常迅速 Unix系统具备清晰的层次化结构 (二)操作系统和内核简介:操作系统是指在整个系统中负责完成最基本功能和系统…
主要内容: 什么是系统调用 Linux上的系统调用实现原理 一个简单的系统调用的实现 1. 什么是系统调用 简单来说,系统调用就是用户程序和硬件设备之间的桥梁. 用户程序在需要的时候,通过系统调用来使用硬件设备. 系统调用的存在,有以下重要的意义: 1)用户程序通过系统调用来使用硬件,而不用关心具体的硬件设备,这样大大简化了用户程序的开发. 比如:用户程序通过write()系统调用就可以将数据写入文件,而不必关心文件是在磁盘上还是软盘上,或者其他存储上. 2)系统调用使得用户程序有更好的可移植性…
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关键…
第一章 Linux内核简介 一.Unix 1.Unix的特点 简洁 绝大部分东西都被当做文件对待.这种抽象使对数据和对设备的操作都是通过一套相同的系统调用借口来进行的:open(),read(),write(),lseek()和close() 出色的平台可移植性——内核和相关的系统工具软件用C语言编写而成 进程创建迅速 进程间通信原语简单稳定 2.Unix的现状 发展成为支持抢占式多任务.多线程.虚拟内存.换页.动态链接和TCP/IP网络的现代化操作系统. 3.linux简介 被广泛移植到Alp…
系统调用 内核提供了用户进程和内核交互的接口,使得应用程序可以受限制的访问硬件设备. 提供这些接口主要是为了保证系统稳定可靠,避免应用程序恣意妄行. 一.内核通信 系统调用在用户空间进程和硬件设备之间添加中间才能.作用有三: 为用户空间提供一种硬件的抽象接口.无需理会物理结构是怎么样的. 系统调用保证了系统的稳定和安全.内核可以有选择的对其访问进行控制. 每个进程都运行在虚拟系统中,用户空间和系统的其余部分提供这样一层公共接口. 二.API.POSIX和C库 API:应用程序不需要访问内核,编程…
一.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实现的…
一.原子操作 原子操作可以保证指令以原子的方式执行----执行过程不被打断. 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上的系统调用实现原理 一个简单的系统调用的实现 1. 什么是系统调用 简单来说,系统调用就是用户程序和硬件设备之间的桥梁. 用户程序在需要的时候,通过系统调用来使用硬件设备. 系统调用的存在,有以下重要的意义: 1)用户程序通过系统调用来使用硬件,而不用关心具体的硬件设备,这样大大简化了用户程序的开发. 比如:用户程序通过write()系统调用就可以将数据写入文件,而不必关心文件是在磁盘上还是软盘上,或者其他存储上. 2)系统调用使得用户程序有更好的可移植性…
模块 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),它等于节拍率分之一. 下面是利用时间中断周期执行的工作: 更新系统运行时间 更新实际时间 在…
一.地址空间 进程地址空间由进程可寻址的虚拟内存组成,内核允许进程使用这种虚拟内存中的地址. 每个进程都有一个32位或64位的平坦地址空间,空间的具体大小取决于体系结构.“平坦”指的是地址空间范围是一个独立的连续区间. 现代采用虚拟内存的操作系统通常都使用平坦地址空间而不是分段式的内存模式. 一个进程的地址空间与另一个进程的地址空间即使有相同的内存地址,实际上也彼此互不相干.这样的进程为线程. 一个进程可以寻址4GB虚拟内存(32位地址空间中),但这不代表能访问所有虚拟地址.可以被合法访问的地址…