
1、系统调用接口
提供系统的API函数,供用户使用,例如 *** 作文件的函数、 *** 作进程和线程的函数、 *** 作内存的函数、 *** 作硬件(如串口、磁盘)的函数、 *** 作网络的函数等等。
2、实现进程管理功能
能够同时(看上去)执行多个进程(任务),比如可以同时运行文件下载、看电影、挂游戏,那么进程管理的内部实现就是进程的调度,也就是实现调度CPU的使用时间提供给不同的用户任务(进程)使用。
3、实现虚拟文件系统
所谓虚拟文件系统,即是相对于实际文件系统的系统,其实是针对实际文件系统再次的实现和接口的抽象,意思是规定了最终提供给用户使用的文件系统的接口。
以及实现实际文件系统调用硬件层的接口,那么实际文件系统就是位于虚拟文件系统和硬件抽象接口中间,就像是夹心饼干中间的奶油一样,可以更换各种颜色的奶油,但是吃起来都是奶油的味道,可便于系统的更新和前后的兼容性、扩展性。
扩展资料:
技术特性
1、抢占式调度系统
Linux内核提供在特定条件下的抢先式调度。直到内核版本2.4,只有用户进程是抢先式的,就是说除了时间片用尽,在用户模式下执行的当前进程,如果有更高态优先级的进程进入TASK_RUNNING状态,它就会被中断。
自从2.6系列Linux内核,增加了中断执行内核代码的任务的能力,但不是对于内核代码的所有段落。
2、可移植性
从移动电话到超级电脑,甚至于有人成功的将Linux内核在索尼出品的游戏机PS2及PS3和微软出品的游戏机Xbox上使用。Linux也是IBM超级计算机BlueGene的 *** 作系统。
一些为手机开发的 *** 作系统,使用Linux内核的修改后的版本,其中包括谷歌Android、FirefoxOS、HPWebOS和诺基亚Maemo。
Linux 内核设计的理念主要有这几个点:
MutiTask,多任务
SMP,对称多处理
ELF,可执行文件链接格式
Monolithic Kernel,宏内核
MutiTask
MutiTask 的意思是多任务,代表着 Linux 是一个多任务的 *** 作系统。多任务意味着可以有多个任务同时执行,这里的「同时」可以是并发或并行:
对于单核 CPU 时,可以让每个任务执行一小段时间,时间到就切换另外一个任务,从宏观角度看,一段时间内执行了多个任务,这被称为并发。
对于多核 CPU 时,多个任务可以同时被不同核心的 CPU 同时执行,这被称为并行。
SMP
SMP 的意思是对称多处理,代表着每个 CPU 的地位是相等的,对资源的使用权限也是相同的,多个 CPU 共享同一个内存,每个 CPU 都可以访问完整的内存和硬件资源。
这个特点决定了 Linux *** 作系统不会有某个 CPU 单独服务应用程序或内核程序,而是每个程序都可以被分配到任意一个 CPU 上被执行。
ELF
ELF 的意思是可执行文件链接格式,它是 Linux *** 作系统中可执行文件的存储格式
ELF 文件格式
ELF 把文件分成了一个个分段,每一个段都有自己的作用,具体每个段的作用这里就不详细说明了,感兴趣的同学可以去看《程序员的自我修养——链接、装载和库》这本书。
另外,ELF 文件有两种索引,Program header table 中记录了「运行时」所需的段,而 Section header table 记录了二进制文件中各个「段的首地址」。
那 ELF 文件怎么生成的呢?
我们编写的代码,首先通过「编译器」编译成汇编代码,接着通过「汇编器」变成目标代码,也就是目标文件,最后通过「链接器」把多个目标文件以及调用的各种函数库链接起来,形成一个可执行文件,也就是 ELF 文件。
那 ELF 文件是怎么被执行的呢?
执行 ELF 文件的时候,会通过「装载器」把 ELF 文件装载到内存里,CPU 读取内存中宏内核的特征是系统内核的所有模块,比如进程调度、内存管理、文件系统、设备驱动等,都运行在内核态。
不过,Linux 也实现了动态加载内核模块的功能,例如大部分设备驱动是以可加载模块的形式存在的,与内核其他模块解藕,让驱动开发和驱动加载更为方便、灵活。
总结一下有如下几个要点:1.
进程0是所有其他进程的祖先,
也称作idle进程或swapper进程.
2.
进程0是在系统初始化时由kernel自身从无到有创建.
3.
进程0的数据成员大部分是静态定义的,即由预先定义好的INIT_TASK,
INIT_MM等宏初始化.
进程0的描述符init_task定义在arch/arm/kernel/init_task.c,由INIT_TASK宏初始化。
init_mm等结构体定义在include/linux/init_task.h内,为init_task成员的初始值,分别由对应的初始化宏如INIT_MM等初始化
Process
1
进程0最终会通过调用kernel_thread创建一个内核线程去执行init函数,这个新创建的内核线程即Process
1(这时还是共享着内核线程0的资源属性如地址空间等)。init函数继续完成剩余的内核初始化,并在函数的最后调用execve系统调用装入用户空间的可执行程序/sbin/init,这时进程1就拥有了自己的属性资源,成为一个普通进程(init进程)。至此,内核初始化和启动过程结束。下面就进入了用户空间的初始化,最后运行shell登陆界面。(注:Init进程一直存活,因为它创建和监控在 *** 作系统外层执行的所有进程的活动。)
——————
这段对进程0的描述引用自《Understanding
The
Linux
Kernel
-
Third
Edtion》
The
ancestor
of
all
processes,
called
process
0,
the
idle
process,
or,
for
historical
reasons,
the
swapper
process,
is
a
kernel
thread
created
from
scratch
during
the
initialization
phase
of
Linux.
This
ancestor
process
uses
the
following
statically
allocated
data
structures
(data
structures
for
all
other
processes
are
dynamically
allocated)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)