
操作系统
文章平均质量分 67
windmissing
喜欢编程,喜欢思考,方向明确
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux0.12引导启动程序
1.从系统加电起所执行程序的顺序ROM BIOS -----> bootsect.S -----> setup.S -----> head.s -----> main.c其中,head.s和main.c都属于system模块main属于初始化程序,这里不讲2.几个程序的比较程序名位置语言ROM BIOSROM bo原创 2012-02-26 16:52:12 · 1228 阅读 · 1 评论 -
Linux2.4从路径名到目标结点
0.__user_walk() -----> 根据给定的文件路径名在,内存中找到或建立代表着目标文件或目录的dentry结构和inode结构(1)获得路径名getname():在上一篇博客中有介绍(2)准备路径搜索path_init():见1(3)沿着路径名的指引进行搜索path_walk():见2(4)释放路径名putname()1.path_init() -----原创 2012-05-11 22:06:47 · 1762 阅读 · 3 评论 -
Linux2.4文件系统中vfsmount、安装点的dentry、设备的dentry之间的关系
1.vfsmount、安装点的dentry、设备的dentry之间的关系(1)一个安装点可以安装多个设备(2)一个设备可以安装到多个安装点上2.vfsmount与vfsmount之间的关系3.vfsmount与安装点的dentry之间的关系图太难画,仅写出关系,图见笔记本(1)vfsmount->mnt_mountpoint指向安装点的dentr原创 2012-05-14 22:13:21 · 4948 阅读 · 0 评论 -
Linux2.4文件系统的卸载
0.sys_umount() -----> 文件系统卸载的系统调用(1)根据设备名搜索设备的安装点不管给的是安装点的路径名还是设备文件的路径名,都会搜过以下结果:nd.dentry指向设备文件根目录的dentrynd.mnt指向设备安装到的安装的vfsmount(2)释放目录项这里只是减少引用计数,移到unused队列,不一定真的释放(3)卸载do_umount():见原创 2012-05-15 16:18:53 · 1405 阅读 · 0 评论 -
Linux2.6进程的创建与删除
一、进程的创建1.系统调用clone()与fork()的区别: 资源的继承方式参数区分父进程与子进程的方法fork()全部复制,即父进程的所有资源全部通过数据结构的复制传给子进程无参数父进程与子进程,从fork()返回时的返回值不同,以此区分二者。子进程返回0.父进程返回子进程的pidclone()有选择地将资源复制给子进原创 2012-05-22 18:43:48 · 2481 阅读 · 2 评论 -
Linux2.6 I/O体系结构
一、I/O体系结构二、I/O总线1.总线计算机内部大部分硬件设备通过总线连接一台计算机可以有几条总线,可以是不同类型总线与总线之间用桥连接2.I/O总线CPU与I/O设备之间的数据通路通常称为I/O总线其中,地址总线16位,数据总线8位、16位或32位三、I/O端口1.概念每个连接到I/O总线上的调和都有自己的I/O地址集原创 2012-06-04 11:15:47 · 1625 阅读 · 0 评论 -
Linux2.4打开一个文件的系统调用
0.sys_open()(1)从当前进程的“打开文件表”中找到一个空闲的项get_unused_fs()(2)建立文件读写的上下文filp_open():(见1)(3)将上下文安装到文件打开表中1.filp_open():建立文件读写的上下文(1)获取指向文件名的dentry和vfsmount:open_namei()若只是打开,则通过path_init()和pat原创 2012-05-21 09:49:28 · 1591 阅读 · 0 评论 -
Linux2.6块设备驱动程序
一、块设备的操作的处理体系结构1.VFS(虚拟文件系统)VFS位于块设备的处理体系结构的上层,提供一个通用的文件模型。VFS和块设备的关系见Linux2.6设备管理系统调用的服务例程调用一个合适的VFS函数,将文件描述符和文件内的偏移量传递给它。2.磁盘高速缓存VFS函数确定所请求的数据是否已经存在磁盘高速缓存中,若存在,就没有必须访问磁盘上的数据了。3.映原创 2012-06-09 16:21:57 · 2082 阅读 · 0 评论 -
Linux2.6设备管理
一、设备管理与文件管理的关系1.文件操作是对设备操作的组织与抽象设备操作是对文件操作的最终实现二、设备驱动程序模型1./sys -----> 总线 -----> PCI -----> 驱动程序 -----> 串口 -----> 设备2.设备驱动程序模型中的几个主要的层次:(1)总线,见Linux2.6 I/O体系结构(2)PCI总线,见三(3原创 2012-06-05 14:30:34 · 1920 阅读 · 1 评论 -
Linux0.12-内存寻址
一、分段与分页的比较1.逻辑地址 -----(分段机制)-----> 线性地址 -----(分页机制)-----> 物理地址分段机制是必须有的,分页机制可以没有。如果没有分页机制,线性地址=物理地址不同的分段机制和不同的分段机制可以随意组合2.逻辑地址 = 选择符(16位) : 偏移值(32位),逻辑地址是二维的线性地址和物理地址都是32位,是一维的3.原创 2012-02-20 20:11:17 · 1638 阅读 · 0 评论 -
Linux0.12任务调度与进程切换
1.schedule():选择系统中下一个要运行的进程(1)循环检测就绪队列中的每个任务 若任务的超时定时器超时 && 状态为可中断睡眠,则超时计时器清0,状态置为就绪 若任务的定时器过期,则定时器清0,SIGALARM信号置位(定时器!=超时定时器) 若任务除了阻塞信号外还有其它信号 && 状态为可中断睡眠,则状态置为就绪原创 2012-03-08 20:44:21 · 1390 阅读 · 0 评论 -
Linux2.6虚拟内存管理
除了分段管理中的LDT和GDT有较大改动,分页管理中增加了三级分页模型以外,大部分内容可以参考Linux0.12-内存寻址一、分段管理:1.Linux中,段基址总是0,逻辑地址与线性地址是一致的。或者说,在Linux中,没有实际上地使用分段机制2.一个进程可以使用一个GDT和一个LDTGDT包含:(1)LDT在GDT中的描述符(2)3个局部段描述符原创 2012-04-27 21:10:56 · 1937 阅读 · 1 评论 -
Linux2.6-内核同步
一、什么是内核抢占1.如果一个进程正在内核态执行时,允许发生内核切换,这就是内核抢占。如果一个进程正在用户态运行,就无所谓内核抢占2.当满足以下任意一个条件时,不允许内核抢占(1)内核正在执行中断处理程序(2)内核正在执行软中断或tasklet(3)内核抢占被显式地禁止只有在执行异常处理程序,且内核抢占没有被显示禁止时,才允许内核抢占。note:内核抢占原创 2012-04-19 11:04:00 · 1201 阅读 · 0 评论 -
Linux2.6进程切换
1.进程切换是指:保存prev进程的上下文,用next的上下文替代。其中上下文包括:页全局目录、内核态堆栈、硬件上下文。2.80x86为进程切换提供的硬件支持:第一种:通过任务门第二种:通过JMP和CALL指令:把硬件上下文存在TSS中,执行这条指令时,通过硬件自动切换TSS,完成硬件上下文的过程TSS是任务状态段,只能存放在GDT中,不能存放在LDT中原创 2012-05-22 14:18:13 · 2538 阅读 · 0 评论 -
Linux2.6可延迟中断
一、基本概念1.Linux把紧随中断要执行的操作分为三类 特点处理方法举例第一类紧急的在禁止可屏蔽中断的情况下立即执行修改设备和处理器同时访问的数据结构第二类非紧急的在开中断的情况下立即执行修改那些只有处理器才会访问的数据结构(例如,按下一个键后读扫描码)第三类非紧急可延迟的由独立的函数来执行原创 2012-05-24 11:28:22 · 1648 阅读 · 0 评论 -
Linux2.6进程调度
一、Linux2.6调度算法的特点1.在固定时间内选中要运行的进程,这个时间不会因为可运行进程增多而变大2.每个CPU有自己的可运行队列3.较好地解决区分交互式进程与批处理进程的问题二、进程按调度类型分类1.SCHED_FIFO:先进先出的实时进程如果没有其它更高优先级(必须是更高)的可运行实时进程(普通进程的优先不可能高于实时进程)出现,就可以一地上运行。对于原创 2012-05-26 16:48:56 · 2165 阅读 · 0 评论 -
Linux2.6进程
1.进程、用户线程、内核线程的区别和联系 进程用户线程(轻量级进程)内核线程代码段有有有数据段有有有描述符task_struct有有有用户空间堆栈有一个线程组共享一个用户空间完全没有内核空间堆栈有有有PID独一无二的一组线程共享原创 2012-05-21 22:13:44 · 2802 阅读 · 0 评论 -
Linux2.4安装一个文件系统
在一个块设备上按一定的格式建立起文件系统的时候,或者系统引导之初,设备上的文件和节点是不可访问的只有把它安装到文件系统中的某个节点上,才能使设备上的文件和节点成为可访问的经过安装后,设备上的文件系统就成为整个文件系统的一部分,或者说,一个子系统最初时,整个文件系统只有一个节点,即根节点"/",这个节点存在于内存中,而不存在于任何具体的设备上系统在初始化时将一个设备安装到节点原创 2012-05-14 21:39:19 · 1813 阅读 · 0 评论 -
Linux2.6虚拟文件系统VFS
一、什么是虚拟文件系统1.VFS是用户的应用程序与文件系统实现之间的抽象层2.VFS支持以下三种类型的文件系统(1)磁盘文件系统(2)网络文件系统(3)特殊文件系统二、通用文件系统模型1.VFS的主要思想是引入一个文件系统模型,这个模式能够表示所有支持的文件系统2.通用文件模型的构成(1)超级块super_block:存放原创 2012-06-01 22:13:12 · 1485 阅读 · 0 评论 -
Linux2.6信号管理
一、什么是信号1.信号是很短的消息,可以被发送一个进程或一个进程组,用于进程间的通信2.消息的内容通常是一个数,这个数用于标识信号信号的接收方一定是进程,发送方可能是进程,或者内核。信号只能发送给属于同一session以及同一个用户的进程3.信号的种类可分为两类(1)常规信号:编码范围1-31,如果一个常规信号被连续发送多次,会被合并成一次,即只有一个发送到原创 2012-03-24 13:58:45 · 985 阅读 · 0 评论 -
Linux0.12初始化程序
1.main()(1)设置系统的根文件设备号以及一些内存全局变量(2)所有方面的硬件初始化工作:陷阱门、块设备、字符设备、tty、开机启动时间、调度程序、硬盘、软驱(3)开中断,切换到任务0中运行(4)切换到用户模式(5)创建一个用于init()的子进程(6)循环执行pause()、2.init()(1)安装根文件系统(2)打开tty0,产生输入输出设备原创 2012-02-28 19:25:29 · 920 阅读 · 0 评论 -
Linux0.12中断处理
1.不带出错码的中断处理过程-asm.s(1)原寄存器入栈(由硬件完成):SS, ESP, EFLAGS, CS(2)中断返回地址入栈:EIP(3)要调用的函数地址入栈(4)EAX的值与栈顶的值(要调用的函数的地址)交换(5)其它寄存器入栈:EBX, ECX, EDX, EDI, ESI, EBP, DS, ES, FS(6)出错号入栈:error_code。如果没有出错号原创 2012-02-29 10:00:35 · 1079 阅读 · 0 评论 -
linux0.12-文件系统-底层通用函数
iget() ----- 从设备dev上读取节点号为nr的i结点1.从i结点表申请一个临时i结点2.扫描i节点表,查找(设备号==dev&&i节点号==nr)的项若未找到,则:(1)用临时结点建立一个i节点(2)从设备dev读取该i节点的信息(3)返回该结点若找到,等待i节点解锁3.若(设备号!=dev||节点号!=nr),则go to step 24.i节点引原创 2012-04-23 09:49:01 · 1102 阅读 · 0 评论 -
Linux0.12-文件系统
文件系统的组成:1.高速缓冲区的管理程序2.文件系统的低层通用函数3.对文件中数据进行读写操作4.系统调用接口的实现MINIX文件系统的结构:1.引导块:存放的是计算机加电启动时同BIOS自动读入的执行代码和数据2.超级块:存放文件系统的结构信息3.i结点位图:i结点是否被使用4.逻辑结构位图:数据区第i个块是否被使用。最多8个,可表示64MB原创 2012-04-22 21:40:00 · 1387 阅读 · 0 评论 -
Linux0.12-文件系统-系统调用接口
do_execve() ----- 系统调用(int 0x80)功能号_NR_execve()调用的C处理函数1.确定原CS值是用户代码段。因为内核代码段不能被替换的2.初始化128KB的参数和环境空间3.取出执行文件的i结点4.计算命令行参数和环境字符串的个数:argc和argv5.计算当前进程的权限,判断当前进程是否有权限执行这个文件6.取出执行文件头部,并分析若执原创 2012-04-23 14:44:44 · 1016 阅读 · 0 评论 -
Linux2.6为数据结构分配内存-slab
1.高速缓存描述符、slab描述符、数据结构对象之间的关系slab描述符也可以在外面不管slab描述符在哪里,空闲链接数组紧跟在slab描述符后面第一张图跟2.6的不太一样,2.6中,所有箭头都是双向的,且没有不同各种类slab描述符的链接建立一个缓冲的专用队列:1.从cache_cache中分配一个kmem_cache_t结构的高速缓存描述符2.进行一原创 2012-04-30 13:01:57 · 1799 阅读 · 0 评论 -
Linux2.6用户空间堆栈区的分配与回收
1.sys_brk(新边界的线性地址)(1)地址检查,地址不低于代码段的终点(2)与页面大小对齐(3)新地址 释放空间(见2) 新地址 > 老边界 -----> 申请空间(见8)2.释放空间(1)线性地址 -> 区间地址(2)预备一个新的区间结构(回收一个区间的一部分,可能导致一个区间变成两个区间)(3)把所有涉及到的区间移到一个临时队列(4)解原创 2012-04-30 21:12:43 · 2176 阅读 · 0 评论 -
Linux地址映射(1)--线性映射与非线性映射
一,线性映射与非线性映射1. 内存管理物理内存管理:Linux内存最小管理单位为页(page),通常一页为4K。初始化时,linux会为每个物理内存也建立一个page的管理结构,操作物理内存时实际上就是操作page页。某些设备会映射在物理内存地址外,这些地址会在使用时建立page结构。 进程内存管理:Linux进程通过vma进行管理,每个进程都有一个task_s转载 2012-04-22 14:39:20 · 3323 阅读 · 0 评论 -
Linux0.12-文件系统-高速缓冲区的管理
1.高速缓冲区位置:内核代码和主内存之间作用:解决I/O操作与CPU处理之间的速度不匹配大小:被划分成与磁盘数据块大小相等的缓冲块管理方式:hash表(设备号^逻辑块号) + 双向链表(所有的buffer_head)2.高速缓冲的划分:3.管理方式:注意,并不是一个散列队列组成双向链表,而是所有的缓冲块,顺序是最近最少使用(LRU)4原创 2012-04-22 22:25:41 · 1601 阅读 · 0 评论 -
Linux0.12-文件系统-文件中数据的访问操作
block_write() ----- 块设备文件数据的读操作1.把参数中文件指针pos位置映射成数据块号和块中偏移量2.将pos所在位置的数据读入到缓冲区的一个缓冲块bread()3.计算要写的长度4.从用户数据缓冲区将数据复制到当前缓冲块的位移位开始处(从第2次开始,偏移量都是0)5.如果还有数据,go to step 2图:见笔记用户读写操作过程,以读为例原创 2012-04-23 10:46:04 · 939 阅读 · 0 评论 -
Linux0.12-文件系统-管道
作用:主要用于进程之间按照先进先出的方式传数据,也可以用于进程间同步执行原理:管道只使用i节点的直接块。内核将i节点的直接块作为一个循环队列,通过修改读写指针来保证先进先出的顺序创建:申请一个管道i结点,分配一页缓冲区(4KB)初始化:i_size指向缓冲区,i_zone[0]指向数据头,i_zone[1]指向数据尾读操作:从尾读出数据,并修改尾指针写操作:原创 2012-04-23 10:50:46 · 1055 阅读 · 0 评论 -
Linux2.4系统调用sys_execve
0.sys_execve:系统调用,让进程执行某个程序(1)在系统空间建立一个路径名的副本(见1)(2)do_execve()(见2)(3)释放路径名副本(即作为缓冲区的管理页面)1.getname()(1)在系统空间定义一个缓冲指针(2)分配一个物理页面作为缓冲区(3)将路径名从用户空间复制到缓冲区(4)缓冲区指针指向这个物理页面2.do_ex原创 2012-05-08 10:52:09 · 3312 阅读 · 0 评论 -
Linux2.6物理内存管理
一、物理内存的分配1.Linux2.6支持非一致内存访问(NUMA),被分为一节点,每一个节点内是UMA80x86系统不使用NUMA,因为只有一个节点每个节点分为3个管理区:ZONE_DMA , ZONE_NORMAL , ZONE_HIGHMEM2.3个管理区的分布与特点见表格: ZONE_DMAZONE_NAORMALZONE_HIG原创 2012-04-28 15:37:15 · 1949 阅读 · 1 评论 -
Linux2.6-4G的线性地址空间的分配与使用
一、4G线性空间的使用1.0-3G属于用户空间,无论是用户态还是内核态都可以寻址,但是内核一般不访问这里的数据3-4G属于系统空间,只有内核态的进程才可以访问。二、系统空间1.3G-4G的系统空间的使用(1)3G ----- 3G+high_memory:对前896MB RAM进程映射的线性地址(2)high_memory ----- PKMAP_BASE:非连续内原创 2012-05-29 19:44:42 · 1661 阅读 · 0 评论 -
Linux2.6系统调用
一、引入系统调用1.概念:操作系统为在用户态运行的进程与硬件设备进行交到提供了一组接口。Linux通过向内核发出系统调用来实现这些接口2.作用:对硬件设备操作的编程更容易提高了系统的安全性使程序更有可移植性3.进入系统调用的两种方法(1)int &0x80汇编指令(2)sysenter汇编指令二、系统调用与API的区别1.API只是一个函数定义,说明原创 2012-05-29 20:09:18 · 1296 阅读 · 0 评论 -
Linux2.6中断与异常
一、基本概念1. 产生的位置发生的时刻时序中断CPU外部随机异步异常CPU正在执行的程序一条指令终止执行后同步2.由中断或异常执行的代码不是一个进程,而是一个内核控制路径,代表中断发生时正在运行的进程的执行中断处理程序与正在运行的程序无关引起异常处理程序的进程正是异常处理程序运行时的原创 2012-05-23 20:47:32 · 3805 阅读 · 2 评论