01
前言
小编最近在学习 Linux 环境下 IO 编程这块的内容,在开始实操之前,小编打算写一篇关于Linux内核组成的推文,用来简单描述一下Linux内核的组成及其相关作用,这样有助于对 IO 编程的整体理解。
02
内容目录
03
开启硬货分享
什么是内核
对于Linux内核组成的描述之前,需要先说明一下什么是内核?
内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。
内核,是一个操作系统的核心。是基于硬件的第一层软件扩充,提供操作系统的最基本的功能,是操作系统工作的基础,它负责管理系统的进程、内存、内核体系结构,设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。
内核的分类可分为单内核和双内核以及微内核。严格地说,内核并不是计算机系统中必要的组成部分。
(注:该段内容参考或来源于百度百科)
内核的组成
对于内核的组成,小编百度看博客的时候,有些说四种,有些说五种。差别就在于有没有进程间通信,为了知识不遗漏,小编在这里按五种来处理。如果读者有不同看法,可以后台留言与小编讨论。
各子系统作用
1、内存管理
外文名:Memory Manager
内存管理是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。一个执行中的程式,譬如网页浏览器在个人电脑或是图灵机(Turing machine)里面,为一个行程将资料转换于真实世界及电脑内存之间,然后将资料存于电脑内存内部(在计算机科学,一个程式是一群指令的集合,一个行程是电脑在执行中的程式)。一个程式结构由以下两部分而成:“本文区段”,也就是指令存放,提供CPU使用及执行;“资料区段”,储存程式内部本身设定的资料,例如常数字串。
(注:该段内容参考或来源于百度百科)
概括:
1、虚拟内存地址与物理内存地址之间的映射
2、管理整个系统的物理内存
3、快速响应内核各个子系统对内存分配的请求
2、进程管理
外文名:Process Scheduler
进程是正在运行的程序实体,并且包括这个运行的程序中占据的所有系统资源,比如说CPU(寄存器),IO,内存,网络资源等。很多人在回答进程的概念的时候,往往只会说它是一个运行的实体,而会忽略掉进程所占据的资源。比如说,同样一个程序,同一时刻被两次运行了,那么他们就是两个独立的进程。linux下查看系统进程的命令是ps。
(注:该段内容参考或来源于百度百科)
概括:
1、管理多个进程对于CPU的访问
2、为多个进程划分时间片
3、同一时间内只有一个进程在运行
4、实现 “ 微观串行,宏观并行 ”(高度概括)
3、进程间通信
外文名:Interprocess communication
简称:IPC
进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。另外,系统空间是“公共场所”,各进程均可以访问,所以内核也可以提供这样的条件。此外,还有双方都可以访问的外设。在这个意义上,两个进程当然也可以通过磁盘上的普通文件交换信息,或者通过“注册表”或其它数据库中的某些表项和记录交换信息。广义上这也是进程间通信的手段,但是一般都不把这算作“进程间通信”。
(注:该段内容参考或来源于百度百科)
概括:
1、支持进程间的多种通信机制。
常见有七种:
①管道---->pipe
②命名管道---->FIFO
③消息队列---->MessageQueue
④共享存储(内存)---->SharedMemory
⑤信号量---->Semaphore
⑥套接字---->Socket
⑦信号---->sinal
2、实现多个进程、多资源的互斥访问、进程间的同步和消息传递
4、虚拟文件系统
外文名:Virtual File Systems
简称:VFS
虚拟文件系统(VFS)是由Sun microsystems公司在定义网络文件系统(NFS)时创造的。它是一种用于网络环境的分布式文件系统,是允许和操作系统使用不同的文件系统实现的接口。虚拟文件系统(VFS)是物理文件系统与服务之间的一个接口层,它对Linux的每个文件系统的所有细节进行抽象,使得不同的文件系统在Linux核心以及系统中运行的其他进程看来,都是相同的。严格说来,VFS并不是一种实际的文件系统。它只存在于内存中,不存在于任何外存空间。VFS在系统启动时建立,在系统关闭时消亡。
(注:该段内容参考或来源于百度百科)
概括:
1、该系统是实现 “一切都是文件” 特性的关键
2、常见文件系统类型:例如FAT、FAT32、NTFS、EXT2、EXT3
3、该系统的功能是管理各种各样的文件系统
5、网络接口
简称:NET
网络接口提供了对各种网络标准的存取和各种网络硬件的支持。在Linux中网络接口可分为网络协议和网络驱动程序,网络协议部分负责实现每一种可能的网络传输协议,网络设备驱动程序负责与硬件设备通信,每一种可能的硬件设备都有相应的设备驱动程序。
概括:
需了解几个概念
1、网络协议
2、套接字
3、设备接口
4、网络缓冲区
04
结尾