linux操作系统最核心的是:
1.文件系统,内存管理系统 【文件,内存】
2.软硬件驱动【驱动】
3.作业控制,虚拟控制台,文件符号链接,虚拟内存对换 【虚拟】
4.网络支持,高速缓冲,动态链接库,x-windows 【网络】
-----------------------------------
1.boot下面有三个汇编程序
(1)磁盘引导程序bootsect.s 【把内核从物理块设备加载到内存】
(2)获取bios【Basic Input Output System】参数程序setup.s 【探测系统配置】
(3)32位运行期的代码 head.s 【进入32位保护模式前初始化】
2.init/目录下的main.c 【初始化系统,创建shell】
3.kenel/ 进程调度,系统调用相关程序
kenel/dev_blk/ 各种设备驱动
kenel/math/数学相关程序
4. fs/文件系统程序
5. mm/内存管理程序
6. include/各种头文件
7. lib/各种库函数
8.tools/ 内核连接工具
-----------------------------
操作系统结构
硬件-内核-服务-应用
------------------------
内核体系结构:
进程调度模块,内存管理模块,文件系统模块,进程间通信模块,网络接口模块
-------------------------
任务数据结构。
【状态,时间片,优先级,信号,退出码,代码段物理地址,长度,堆栈内存地址.
进程号,父进程号,会话号,用户标记号,组,tty子设备号,工作目录
状时优信代码堆
进会用组设备工】
os
-
-
-
-
-
--------------------------------
进程初始化
boot中的引导程序把内核加载到内存,然后执行init/main.c,进程号0
【kill 0,会怎么样。不到0的,估计kill 0应该没啥事,kill应该无这个权限.
man kill 发现,实际是
All processes in the current process group are signaled.
杀死自己和同组的所有
PID 为零的 时候向与发送者同组的所有进程发送该信号】
进程1,shell
最大进程数量:64 都是从0,fork出来的
【之所以是找到的最长时间片的进程优先执行,是因为
使用的是时间片轮转法进行分配,这样时间片越长的说明是越新被加入任务的,没被执行的概率最大,或者优先级高】
虚拟内存:程序内存可以比系统实际内存大得多。因为重复利用,就像火车开过后,把铁轨不断放到火车之前。
2.7 进程堆栈
(1)系统初始化堆栈(2)内核程序堆栈(3)任务内核态堆栈(4)任务用户态堆栈
----------------------------
linux内核代码结构
linux
-boot【系统引导汇编程序】
-fs【文件系统】
-include【头文件】
-asm【与cpu体系相关】
-linux【内核专用】
-sys【系统数据结构】
-init【内核初始化】
-kernel【进程调度,信号处理,系统调用】
-blk_drv【块设备驱动】
-chr_drv【字符设备驱动】
-math【数学】
-lib【内核库】
-mm【内存管理】
-tools【内核工具】
-----------------------------
头文件
【常数,字符类型,错误号,文件控制头,信号头,时间,输入输出】
asm
【io,内存拷贝,段操作,系统】
linux
【内核配置,软驱,文件,硬盘,调度,调用】
sys
【文件状态,类型,名称结构,等待调用】
-----------------------------
boot【引导启动】
bootsect.s【磁盘引导,将setup.s从磁盘加载到内存】
setup.s【读取系统数据,光标位置,显示内存,显示状态,硬盘参数等】
head.s 【进入内核保护模式,去运行main()函数】
init【初始化程序】
【载入内存,读参数,运行main,
之后,每10秒发出一次时钟中断,检查所有进程的当前执行情况,
来确定进程的下一步状态。
实际上很像win32编程所干的事情。】
---------------------------------------