linux内核调度机制:


   如果只有一个linux内核,而没有编译器类似的程序,只有内核是不能在硬件上运行的,所以linux内核提供了开源程序的平台,开源程序又催生了linux的发展,而底层的硬件要被上层应用使用,又需要驱动程序。

   在多程序运行时,CPU进行时间分片(timeslice)分配给每个程序,并且程序要运行,必须在内存中,但是内存分片会形成内存碎片,所以最后出现了线性地址物理地址。多程序同时运行时进行交替,简称切换,为了保证多个程序不互相打搅,在内存切换按时有序,所以把在内存中程序的副本,称为进程,实现对运行中程序资源分配的单位,所以一个基本内核,最基本的功能,应该具有:CPU时间分配、内存管理、进程管理、安全管理、驱动硬件,因此,每个硬件都必须有驱动程序,一些常用的驱动程序可以集成在内核中,不常用的就需要安装第三方驱动。

   操作系统基本上分三个层次,最底层硬件-内核-应用程序,操作系统起来之后需要一个机制供用户操作(比如桌面,为人机接口),有一个程序供用户去管理其他应用程序,即shell,SHELL分两类:GUI图形用户接口和CLI命令行接口。为了保证内核的功能够底层,够简洁,够通用,内核将底层硬件的功能通过系统调用(system call)向上层应用程序提供,系统调用即函数。为了简化程序员的工作,将相应系统调用进行封装,形成通用功能,被称为(被调用以后的程序)。库的调用方式有两种:静态编译和动态编译(例如windows中以.dll结尾的文件,linux中为C语言提供基本的底层运行库为glibc)。

   在系统运行之后,内存中有一段空间只有内核才能访问,用户是无法访问的,用户是不能跟内核空间打交道的。比如说用户执行rm /tmp/test.txt,用户空间执行程序之后,发现需要删除文件,要操作硬件,而删除需要内核进行,所以CPU要陷入到内核模式,CPU分级别,用户空间在3,内核空间为0,只有在0级别下才能进行操作删除。所以不同平台的库调用机制不一样,库也不一样,所以不同程序在不能平台不能使用,因而为了保证库UNIX和LINUX库的兼容性,可移植性,形成了一个标准,即调用方式和输出结果是一样的,称作POS(可移植操作系统),后改名为POSIX,像POSIX规范,叫API规范(应用编程接口)。但API相同,ABI(应用二进制接口)不同,即在LINUX中编译好的程序在UNIX中不能执行,也就是执行格式不一样,如果重新编译,即可使用,然后ABI取决于库和内核。