开始学习Linux编程了,将最近的知识点总结一下:
Linux内核的职责:
1、进程调度:Linux内核允许多个进程同时驻进内存》,Linux内核需要按照一定的策略合理的分配CPU资源;
2、内存管理:Linux内核具有虚拟内存管理机制(VM),带来的优势:
a、进程与进程,进程与内核之间彼此隔离,确保了进程之间不相干扰的运行,同时确保了内核空间的安全
b、由于进程对进程数据访问的局部性,只需要将进程的一部分资源加载进内存,节省了内存空间;
3、提供了文件系统:Linux内核在磁盘之上抽象出文件系统,允许对于文件的操作,在Linux的设计思想中一切皆文件;
4、创建和终止进程:内核加载进程运行所需要的资源,并且在进程结束之后,回收并且释放这些资源;
5、控制对于设备的访问:Linux内核为计算机外部设备提供了标准接口;
6、网络服务:Linux内核管理网络设备接收到的数据,并且根据内核匹配到的信息传递给应用进程;
7、提供系统调用应用编程的接口(API):内核为应用进程提供系统调用的接口;
Linux内核还需要负责多进程访问硬件资源时发生的冲突;
两种状态:
用户态和核心态:与之相对应的内存空间称为用户空间和内核空间,需要注意的两点是:1、切换在用户态时,CPU只能够访问被标记为用户空间的内存,如果尝试访问内核空间的数据,会引发异常;2、当CPU位于核心态时,CPU既能够访问用户空间内存,也能够访问用户空间内存;对于进程来说信号的传递和进程间通信事件的触发,都是由内核来进行协调的;进程本身是无法创建出新的进程的;进程同时也不能直接和计算机的硬件设备直接进行通信;这些工作都需要内核来进行协调;
在内核维护的数据结构中,实现了一些几个功能:
1、这些数据结构包含了所有正在运行的进程的有关信息,伴随着进程转台的改变,内核会及时的更新这些数据结构;
2、内核所维护的数据结构可以实现文件和磁盘位置之间的对应关系,从而方便应用程序对于文件的操作;
3、这个底层的数据结构同时还维护着进程的虚拟内存和计算机的物理内存以及交换分区之间的映射关系;
文件描述符:
通常是一个非负的整数,比较小,用来描述某个使用open()函数或者功能类似的函数所打开的文件;由shell启动的文件描述符包括:0:stdin,标准输入;1:stdout:输出;2:stderr,标准错误;
进程的相关知识:
进程表示的是正在执行的程序的实例,在程序执行时,内核将程序代码加载进虚拟内存,并且为程序变量分配空间,建立内核记账(bookkeeping)的数据结构;
进程所占用的内存资源情况:
文本:data表示的是程序的指令数据;
数据:表示的是程序使用的静态变量;
堆:程序可以从这个区域额外分配动态内存;
栈:随函数调用,返回而递减的一片内存,通常用于为局部变量和函数调用的链接信息分配存储空间;
内核是通过对于父进程的复制来创建子进程的,子进程从父进程继承数据段,堆以及栈数据的副本,并且使用这部分数据,但是不会影响父进程的数据;大多数shell会将进程执行完毕的返回值保存在$?中,