Bootstrap

Linux内核学习

操作系统与中断理解

1、操作系统的结构
在这里插入图片描述

2、操作系统的工作方式:
1、把操作系统从用户态切换到内核态 (从用户应用程序 到内核的流程)
2、实现操作系统的系统调用 (操作系统的服务层)sys_call
3、应用操作系统提供的底层函数,进行程序实现
3.1 操作系统的驱动结构
4、退出后从内核态切换到用户态
3、操作系统中各级模块的关联
3.1linux内核的整体模块:进程调度模块、内存管理模块、文件系统模块、进程间通信模块、驱动管理模块
3.2每个模块间的关系 linux所有的设备都当成文件。
1内存管理和驱动管理 虚拟内存和回存机制
2VFS虚拟文件系统,把硬件当成文件
4、操作系统的各层独立性(类似面向对象的设计思想)
管理层(管理的就不去实现 提供接口)
实现层(实现的就不去提供接口)
易于升级维护
高版本的内核与低版本的内核的区别:内核驱动的管理模式没有巨大的改变,(一段时间3个阶段的跳跃,零散 分层 设备树(为了安卓系统))
进程的调度算法发生了改变,进程的管理方式没有巨大改变
5、linux中的中断机制
1、分类:硬件中断与软件中断
电脑主机中的硬件中断控制器芯片发出的中断
ARM中断控制器芯片发出的中断
软件中断 异常 SWI
CUP自行保存的中断
1.2代码结构 asm.s(控制中断的处理过程以及恢复过程) trap.c(中断的执行过程) system_call.s(硬件中断处理过程) fork.c signal.c exit.c sys.c(软件中断处理过程)
6、linux中中断的工作流程
1将所有的寄存器值入栈 复原的有ss寄存器 EFLAGS 等 错误码
2将异常码入栈(中断号)
3将当前的函数返回值入栈(为了在中断执行后能够找到在哪中断的,能够复原)
4调用中断服务函数
5将所有寄存器值出栈
7、中断的代码实现过程
在这里插入图片描述
在这里插入图片描述

system_call类似asm.s文件 将通用寄存器保存到堆栈中
代码段 数据段  程序状态段  栈  堆
	//定义系统调用的sys_call_table
fn_ptr sys_call_table[] = { sys_setup, sys_exit, sys_fork, sys_read,
sys_write, sys_open, sys_close, sys_waitpid, sys_creat, sys_link,
sys_unlink, sys_execve, sys_chdir, sys_time, sys_mknod, sys_chmod,
sys_chown, sys_break, sys_stat, sys_lseek, sys_getpid, sys_mount,
sys_umount, sys_setuid, sys_getuid, sys_stime, sys_ptrace, sys_alarm,
sys_fstat, sys_pause, sys_utime, sys_stty, sys_gtty, sys_access,
sys_nice, sys_ftime, sys_sync, sys_kill, sys_rename, sys_mkdir,
sys_rmdir, sys_dup, sys_pipe, sys_times, sys_prof, sys_brk, sys_setgid,
sys_getgid, sys_signal, sys_geteuid, sys_getegid, sys_acct, sys_phys,
sys_lock, sys_ioctl, sys_fcntl, sys_mpx, sys_setpgid, sys_ulimit,
sys_uname, sys_umask, sys_chroot, sys_ustat, sys_dup2, sys_getppid,
sys_getpgrp, sys_setsid, sys_sigaction, sys_sgetmask, sys_ssetmask,
sys_setreuid,sys_setregid };
;