
Linux
文章平均质量分 80
王炎林
这个作者很懒,什么都没留下…
展开
-
Linux系统的中断、系统调用和调度概述
最近学习Linux操作系统,关于中断系统调用和进程的级别总是感觉有些模糊的地方,特在此做个小结,整理下思路。所谓的中断就是在计算机执行程序的过程中,由于出现了某些特殊事情,使得CPU暂停对程序的执行,转而去执行处理这一事件的程序。等这些特殊事情处理完之后再回去执行之前的程序。中断一般分为三类:1、由计算机硬件异常或故障引起的中断,称为内部异常中断;2、由程序中执行了引起中断的指令而造成的中断,原创 2012-11-10 21:03:30 · 4728 阅读 · 0 评论 -
i节点
以Linux 0.11为实例,兴趣所至,个人总结,不保证正确性。。。[i节点] i节点是表征文件的方式,因此在linux 0.11内核中,有一系列专门操作i节点的函数,在fs/inode.c中。与i节点进程同步相关的函数,主要是wait_on_inode、lock_inode和unlock_inode,这几个函数都比较简单。以lock_inode函数为例,sta原创 2013-01-06 13:58:18 · 3465 阅读 · 2 评论 -
Linux文件系统概述
以Linux 0.11为实例,个人总结,不保证正确性。。。[文件系统]磁盘上的数据以块为单位进行读写,每一个块称为一个逻辑块。在理解磁盘的逻辑视图时,以逻辑块为单位来理解。磁盘上数据按照使用情况分,可以分成以下几个部分:引导块、超级块、i节点位图区、逻辑块节点位图区、i节点区、数据区引导块中是整个系统的启动代码,只有用于启动的文件系统才有数据,其它的文件系统这个块没有数据(原创 2013-01-05 13:44:11 · 1590 阅读 · 0 评论 -
Linux高速缓存详解(二)
[高速缓存的写操作]对高速缓存的写操作,主要来自于其它函数对高速缓存的使用。写操作的使用方式很多,例如在inode.c的write_node函数。write_node函数在调用是需要传递一个指向inode节点的指针,并且设置好这个i节点的对应的设备号和节点号。write_node函数的作用是将一个i节点的信息写入设备中(其实是写入高速缓存中)。这里摘抄部分与高速缓存相关的部分原创 2012-12-17 15:53:30 · 3639 阅读 · 2 评论 -
Linux高速缓存概述
[数据缓冲区高速缓存]内核通过保存一个称为数据缓冲区高速缓存的内部数据缓冲区池来试图减小对磁盘的存取频率。高速缓冲含有最近被使用过的磁盘块的数据在Linux内核0.11中,它默认最多支持16M的物理内存。对系统内存的分配情况如下:Linux内核占用物理内存最前段的一部分。随后是高速缓冲区,它的最高内存地址为4MB。高速缓冲区被显示内存和ROM BIOS分成两段。剩余的内存部分称为主内存区,原创 2012-12-16 13:42:28 · 2341 阅读 · 4 评论 -
Linux高速缓存详解(一)
个人学习总结,不保证正确性。。。在Linux高速缓存概述中介绍了Linux 0.11中的高速缓存的基础结构,这一部分将详细分析Linux高速缓存部分的相关函数。[数据结构]这里介绍下另外和高速缓存相关的数据结构,高速缓存散列表、空闲链表指针free_list以及等待在缓存块上的指针buffer_wait。它们定义分别如下:(代码来源buffer.c)struct原创 2012-12-17 11:19:19 · 4721 阅读 · 0 评论 -
Linux进程的表示
个人学习整理笔记,不保证正确性。。。1、表示一个进程需要哪些信息 当进程在内存中时,内核要能够追踪到进程的状态,需要了解进程的各个段在内存中的分布,代码段、数据段、用户堆栈、核心堆栈等相关数据,还有进程执行是相关的寄存器。8个通用寄存器、段寄存器、指令寄存器等。进程的运行级别、进程的状态、进程使用的资源、进程相关的信号等等,内核需要有方法能够追踪到上述所有的原创 2012-12-10 13:43:19 · 2638 阅读 · 0 评论 -
Linux信号系统详解
代码对应linux kernel v0.11[Linux信号系统简介] 在Linux系统中,信号机制是在软件层次上对中断机制的一种模拟。一个进程接收到信号之后,有相应的信号的处理程序,而一个进程也可以给另外一个(或一组)进程发送信号。在内核版本的0.11版本中,每个进程都有一个结构体sigaction的数组,类似于系统的中断描述表(也被称为中断向量表),这个数组可以原创 2012-11-18 22:25:29 · 8026 阅读 · 0 评论 -
Linux进程状态详解
以下部分的代码示例,来自于Linux内核的0.11版本源码在定义进程的数据结构task_struct时,有一个state字段是用来表示进程状态的,这里总结了下关于state字段的操作关于进程的几个状态值在sched.h中定义如下#define TASK_RUNNING 0#define TASK_INTERRUPTIBLE原创 2012-11-17 14:10:36 · 3217 阅读 · 3 评论 -
内存管理和地址翻译概述
ps:个人总结与理解,不保证正确性。。。[保护模式中指令地址的理解] 在传统的无保护模式下的地址空间中,在指令中的地址是16位的,段寄存器也是16位的。但当时Intel8086支持的是20位的地址,因此会将指令中的地址与相应的段寄存器中的内容进行操作得到20位的地址。具体的操作是应该是段寄存器中的内容左移4位,然后与指令中的地址求和,这样就得到了新的20位的地址。这样的原创 2012-11-24 20:52:06 · 2672 阅读 · 0 评论 -
Linux中断详解
这里以linux-kernel 0.11版本为基础整理中断相关知识,目的在于对于中断有一个全面、清晰和简洁的认识1、Linux的中断类型 Linux的各种中断都是由系统负责统一处理的。在响应一个特定的中断的时候,内核会执行一个函数,该函数叫做中断处理函数或中断服务例程。CPU执行完一条指令后,下一条指令的逻辑地址会被放在相应的寄存器中(CS和EIP),在执行新指令之前,原创 2012-11-14 18:53:32 · 7753 阅读 · 4 评论 -
Linux内存管理
Linux 0.11的内存管理总结。。。许多其它内容参见“地址翻译”部分1、分页相关的页目录表和页表 Linux 0.11中的内存管理是分页式的内存管理。程序中的逻辑地址,在经过地址翻译后会被转成线性地址。内存管理部分所接触的地址,基本上都以线性地址为主。 在分页式的内存管理中,将物理内存看成是一个个的连续的页组成。在Linux 0.11中,这个页的大小是4KB。因此,原创 2013-01-14 19:43:47 · 2226 阅读 · 1 评论