码迷,mamicode.com
首页 > 其他好文 > 详细

磁盘及文件系统管理之三

时间:2016-01-26 18:47:22      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:磁盘各个存储区   进程运行状态   

一、内核空间和用户空间
   Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~ 4G。Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为“内核空间”。而将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF),供各个进程使用,称为“用户空间“)。因为每个进程可以通过系统调用进入内核,因此,Linux内核由系统内的所有进程共享。于是,从具体进程的角度来看,每个进程可以拥有4G字节的虚拟空间。

二、内核态和用户态
   当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。即此时处理器在特权级最低的(3级)用户代码中运行。当正在执行用户程序而突然被中断程序中断时,此时用户程序也可以象征性地称为处于进程的内核态。因为中断处理程序将使用当前进程的内核栈。这与处于内核态的进程的状态有些类似。


三、进程上下文和中断上下文
   处理器总处于以下状态中的一种:

1、内核态,运行于进程上下文,内核代表进程运行于内核空间;

2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;

3、用户态,运行于用户空间。

用户空间的应用程序,通过系统调用,进入内核空间。这个时候用户空间的进程要传递很多变量、参数的值给内核,内核态运行的时候也要保存用户进程的一些寄存器值、变量等。所谓的“进程上下文”,可以看作是用户进程传递给内核的这些参数以及内核要保存的那一整套的变量和寄存器值和当时的环境等。

硬件通过触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。所谓的“中断上下文”,其实也可以看作就是硬件传递过来的这些参数和内核需要保存的一些其他环境(主要是当前被打断执行的进程环境)。


以上内容从网上贴过来的。


Q:为什么要把进程运行模式进行划分?

    因为使用系统的人有可能是各种级别的用户,这就有可能菜鸟级用户胡乱操作而损害整个系统,为了防止这种现象,我们把进程运行模式分成内核模式和用户模式,内核模式拥有最大权限,可以直接操作硬件,而用户模式下的进程则没有这类权限,当用户态进程想使用硬件功能的话则可以使用系统调用,然后进程暂时切换到内核模式,这样就算用户的程序有问题,也不会损害系统。


技术分享

Boot Block:引导块,即MBR,记录了引导程序(446Byte)、磁盘的分区信息(64Byte)和MAGIC number(最后2Byte)

Block Group:我们把磁盘逻辑划分成一个个小块用以存储信息,但是当这些小块数量多到一定程度,我们存储信息的效率也会变得低下,为了解决这个问题,我们把这些小块再次划分成一个个块组(Block Group)。这个就类似于100个人中找1个人,和把100个人划分成2组,再在每组50个人中查找一样。

    Super Block:超级块,记录整个分区的全局信息,比如分区从哪个磁道哪个扇区开始,到哪个磁道哪个扇区结束、块大小、文件系统版本等等,开始的时候每个块组都保存有一个超级块的备份,但是这样太浪费空间了,于是后来就不定块进行备份,所以有的块组里面有,有的没有这个超级块,当超级块损坏的时候整个分区的信息就会丢失,所以超级块非常重要。

    GDT:块组描述符(group Descriptor table)记录了块组全局信息,比如inode有多少个,数据区有多大,还空闲多少等等。每个块组都有一个GDT,当GDT损坏的时候,整个块组的信息就会丢失。

    Block Bitmap:块位图,记录每个块的是否被使用。

        我们知道,我们存储信息的时候要先判断这个块是否被使用,当块的数量很多的时候,这样是非常低效的。而块的状态无非就两种,使用和未使用,这样我们只需要使用一个位的高低电平就能表示其存储状态。我们把这些位集中到一起,就是位图,以后存储数据的时候,只要先看看位图里面对应的状态就可以了。

    Inode Bitmap:节点位图,同样地,节点我们也要先判断是否被使用,当数量很多时,用节点位图可以提高效率

    inode table:节点的存储区域,节点记录了这个文件的属性信息,权限,大小等,(但是没有文件名,文件名在目录文件的数据存储区存储)。

    data block:数据块,存储真正的数据信息。  一些特殊文件可能存储的数据不一样,比如目录文件存储文件名和文件对应的节点,设备文件没有数据存储区等等.

本文出自 “单季稻” 博客,请务必保留此出处http://linzb.blog.51cto.com/5192423/1738646

磁盘及文件系统管理之三

标签:磁盘各个存储区   进程运行状态   

原文地址:http://linzb.blog.51cto.com/5192423/1738646

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!