Linux操作系统详解

0. 图例

linux


1.内存管理

对于任何一台计算机而言,其内存以及其它资源都是有限的。
为了让有限的物理内存满足应用程序对内存的最大需求量,
Linux采用了称为“虚拟内存”的内存管理方式。
Linux将内存划分为容易处理的”内存页”。(对于大部分体系结构来说都是4kb)
Linux包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。
不过内存管理要管理的可不止4KB缓冲区

Linux提供了对4KB缓冲区的抽象,例如slab分配器
这种内存管理模式使用4KB缓冲区为基数,
然后从中分配结构,并根据内存页使用情况,
比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。
这样就允许该模式根据系统需要来动态调整内存使用。

为了支持多个用户使用内存,有时会出现可用内存被消耗光的情况。
由于这个原因,页面可以移出内存并放入磁盘中。
这个过程称为交换,因为页面会被从内存交换到硬盘上。
内存管理的源代码可以在./linux/mm中找到。


2.进程管理

进程实际是某特定应用程序的一个运行实体。
在Linux系统中,能够同时运行多个进程,
Linux通过在短的时间间隔内轮流运行这些进程而实现“多任务”。
这一短的时间间隔称为“时间片”
让进程轮流运行的方法称为“进程调度”
完成调度的程序称为调度程序。

进程调度控制进程对CPU的访问。
当需要选择下一个进程运行时,
由调度程序选择最值得运行的进程。
可运行进程实际上是仅等待CPU资源的进程,
如果某个进程在等待其它资源,则该进程是不可运行进程。
Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。

调度程序中有基于优先级的调度算法。
在时间片间隔中执行一个程序,
程序各自待在内存的一个自己的小地方,
被调度程序点名了,CPU就过去服务服务。
这个过程叫做进程调度。

通过多任务机制,每个进程可认为只有自己独占计算机,
从而简化程序的编写。每个进程有自己单独的地址空间,并且只能由这一进程访问,这样,操作系统避免了进程之间的互相干扰以及
“坏”程序对系统可能造成的危害。
为了完成某特定任务,
有时需要综合两个程序的功能,
例如一个程序输出文本,而另一个程序对文本进行排序。
为此,操作系统还提供进程间的通讯机制来帮助完成这样的任务。
Linux 中常见的进程间通讯机制有信号、管道、共享内存、信号量和套接字等。

内核通过 SCI 提供了一个应用程序编程接口(API)来创建一个新进程(fork、exec 或 Portable Operating System Interface [POSⅨ] 函数),
停止进程(kill、exit),
并在它们之间进行通信和同步(signal 或者 POSⅨ 机制)。


3.文件系统

和DOS等操作系统不同,
Linux 操作系统中单独的文件系统
并不是由驱动器号驱动器名称(如 A: 或 C: 等)来标识的。
相反,和 UNIX 操作系统一样,Linux 操作系统将独立的文件系统组合成了一个层次化的树形结构
并且由一个单独的实体代表这一文件系统。

Linux 将新的文件系统通过一个称为“挂装”“挂上”的操作
将其挂装到某个目录上,从而让不同的文件系统结合成为一个整体。
Linux 操作系统的一个重要特点是它支持许多不同类型的文件系统
Linux 中最普遍使用的文件系统是 Ext2
它也是Linux土生土长的文件系统。
但 Linux也能够支持 FATVFATFAT32MINIX
不同类型的文件系统,从而可以方便地和其它操作系统交换数据。
Linux 支持许多不同的文件系统,并且将它们组织成了一个统一的虚拟文件系统.

虚拟文件系统(VirtualFileSystem,VFS):隐藏了各种硬件的具体细节,把文件系统操作和不同文件系统的具体实现细节分离了开来,
为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。
虚拟文件系统可以分为逻辑文件系统设备驱动程序
逻辑文件系统指Linux所支持的文件系统,如ext2,fat
设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。

虚拟文件系统(VFS)是 Linux 内核中非常有用的一个方面,
因为它为文件系统提供了一个通用的接口抽象。
VFSSCI内核所支持的文件系统之间提供了一个交换层。
即VFS 在用户和文件系统之间提供了一个交换层。


1. 用户程序
2. SCI 系统调用接口
3. VFS
4. 文件系统
5. 缓冲区
6. 设备驱动程序
7. 物理设备

在 VFS 上面,
是对诸如 openclosereadwrite 之类的函数的一个通用 API 抽象。在 VFS 下面是文件系统抽象,它定义了上层函数的实现方式。
它们是给定文件系统(超过 50 个)的插件。
文件系统的源代码可以在 ./linux/fs 中找到。
文件系统层之下是缓冲区缓存,
它为文件系统层提供了一个通用函数集(与具体文件系统无关)。
这个缓存层通过将数据保留一段时间(或者随即预先读取数据以便在需要时就可用)优化了对物理设备的访问。
缓冲区缓存之下是设备驱动程序,它实现了特定物理设备的接口。
因此,
用户和进程不需要知道文件所在的文件系统类型,
而只需要象使用 Ext2 文件系统中的文件一样使用它们。


4. 设备驱动程序

设备驱动程序是 Linux 内核的主要部分。
和操作系统的其它部分类似,设备驱动程序运行在高特权级处理器环境中,从而可以直接对硬件进行操作,
但正因为如此,任何一个设备驱动程序的错误都可能导致操作系统的崩溃。
设备驱动程序实际控制操作系统和硬件设备之间的交互。
设备驱动程序提供一组操作系统可理解的抽象接口,完成和操作系统之间的交互,而与硬件相关的具体操作细节由设备驱动程序完成。
一般而言,设备驱动程序和设备的控制芯片有关,
例如,如果计算机硬盘是 SCSI 硬盘,则需要使用 SCSI 驱动程序,
而不是 IDE 驱动程序。


5. 网络接口(NET)

提供了对各种网络标准的存取和各种网络硬件的支持。
网络接口可分为网络协议网络驱动程序

网络协议部分负责实现每一种可能的网络传输协议。
众所周知,TCP/IP 协议是 Internet 的标准协议,
同时也是事实上的工业标准。
Linux 的网络实现支持 BSD 套接字,
支持全部的TCP/IP协议。
Linux内核的网络部分由BSD套接字网络协议层网络设备驱动程序组成。
网络设备驱动程序负责与硬件设备通讯,
每一种可能的硬件设备都有相应的设备驱动程序。


6. shell

shell是系统的用户界面,
提供了用户与内核进行交互操作的一种接口。
它接收用户输入的命令并把它送入内核去执行,
是一个命令解释器。
另外,shell编程语言具有普通编程语言的很多特点,
用这种编程语言编写的shell程序与其他应用程序具有同样的效果。
目前主要有下列版本的shell。
1. Bourne Shell:是贝尔实验室开发的。  
2. BASH:是GNU的Bourne Again Shell,
是GNU操作系统上默认的shell,
大部分linux的发行套件使用的都是这种shell。
3. Korn Shell:是对Bourne SHell的发展,
在大部分内容上与Bourne Shell兼容。    
4. C Shell:是SUN公司Shell的BSD版本。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值