Linux核心原理:操作系统综述

一、Linux内核

(1)内核饰演的角色

操作系统像一家软件外包公司,内核就是这家公司的老板,操作系统就是用于协调各种资源帮客户办成事情。

(2)要点

1、内核通过协调操作系统各种资源,实现各种功能;自补充:系统资源最终还是指时间和空间资源。
2、内核通过系统调用、文件管理子系统、进程管理子系统、内存管理子系统、网络管理子系统、设备子系统协调和管理着操作系统的各项源,是完成协调工作的具体实现载体。
3、系统调用是系统功能调用的统一入口
4、进程管理子系统管理进程生命周期和资源
5、内存管理子系统对内存进行管理、分配、回收、隔离
6、文件子系统管理文件,相当于档案管理系统,管理文档资料
7、设备子系统管理输入输出设备
8、网络子系统,网络协议栈和收发网络包

(3)理解鼠标双击QQ,操作系统干了什么

1、鼠标是输入设备,鼠标驱动负责鼠标与设备子系统通信;
2、鼠标双击QQ图标时,鼠标发送硬中断,内核执行硬中断处理函数,快速处理硬中断信息,将鼠标双击QQ的必要信息和数据复制到内存,调起软中断处理函数,结束硬中断,软中断执行硬中断未完成后续任务;
3、软中断唤起1号进程,1号进程进入CPU,根据传入的信息,知道QQ程序存放虚拟文件系统位置,实际是把位置信息从内存装载到CPU寄存器中,然后创建新进程,即QQ进程;
4、创建QQ进程,QQ进程进入就绪状态,被调入CPU运行处于运行状态,根据程序这个计划书,加载相应数据到内存,执行二进制的指令;
5、QQ启动后需要显示到显示器,QQ程序调用系统调用,QQ陷入内核态,操作硬件资源的代码都是内核态代码,也就是内核函数,产生软中断事件,告诉显示卡驱动程序,要在显示器什么位置现实QQ的登录框,显卡驱动程序收到指令和数据后,立即回应QQ进程,QQ进程让出CPU处于等待状态;显卡驱动继续协调显卡芯片、显卡内存处理显示数据,最终由显卡将QQ登录框显示在显示器上,同时产生硬中断事件,告诉QQ进程显示完成,QQ进程从等待状态恢复到就绪状态,等待用户的输入产生硬中断,再次被调入CPU执行功能。就可以愉快的聊天了。

(4)最新稳定内核版本时5.0.7,目录结构

kernel:内核管理核心代码-进程管理子系统
mm:内存管理代码-内存管理子系统
drivers:驱动程序代码-设备管理子系统
fs:文件系统代码-文件管理子系统
net: 网络协议代码-网络管理子系统
arch: 体系结构代码,如x86、arm等
ipc: 进程间通信子系统
init: Linux系统启动初始化相关代码

二、常见Linux命令

三、几个系统调用

(1)创建进程

1、Linux中父进程调用fork创建子进程。在 Linux 里,要创建一个新的进程,需要一个老的进程调用用 fork 来实现,其中老的进程叫作父进程(Parent Process),新的进程叫作子进程(Child Process)。
2、父进程调用fork时,子进程拷贝所有父进程的数据接口和代码过来。
3、当前进程是子进程,fork返回0;当前进程是父进程,fork返回子进程进程号
4、如果返回0,说明当前进程是子进程,子进程请求execve系统调用,执行另一个程序。
5、如果返回子进程号,说明当前进程是父进程,按照原父进程原计划执行。
6、父进程要对子进程负责,调用waitpid将子进程进程号作为参数,父进程就能知道子进程运行完了没有,成功与否。
7、操作系统启动的时候先创建了一个所有用户进程的“祖宗进程”,进程号为0,0号进程是所有用户态进程的祖先
1)创建进程的系统调用:fork
2)执行另一个程序的系统调用:execve
3)将子进程的进程号作为参数传给它,父进程就能知道子进程运行完了没有,成功与否:waitpid

(2) 内存管理

1、每个进程都有独立的进程内存空间,互相之间不干扰。(隔离性)
2、进程内存空间,存放程序代码的部分,称为代码段(Code Segment)。
3、存放进程运行中产生数据的部分,称为数据段(Data Segment)。
4、动态分配的,会较长时间保存,指明才销毁的,这部分称为堆(Heap)
5、进程写入数据的时候,现用现分物理内存给进程使用。
6、分配内存数量比较小时,使用brk调用,会和原来的堆数据连在一起。
7、需要分配的内存数据量比较大的时候,使用mmap,重新划分一块内存区域。
1)分配较小内存数量,和原来堆内数据连在一起:brk
2)分配较大内存数量,重新划分一块内存区域:mmap

(3)文件管理

文件的操作六个最重要系统调用:
1、打开文件:open
2、关闭文件:close
3、创建文件:creat
4、打开文件后跳到文件某个位置:lseek
5、读文件:read
6、写文件:write
7、Linux一切皆文件
1)启动一个进程,需要一个程序文件,这是一个二进制文件。
2)把日志打印到交互控制台上,在命令行上唰唰地打印出来,这其实也是一个文件,是标准输出stdout 文件。
3)进程可以通过网络和其他进程进行通信,建立的Socket,也是一个文件。
4)进程运行起来,要想看到进程运行的情况,会在 /proc 下面有对应的进程号,还是一系列文件。
8、一切皆文件的优势即使统一了操作的入口,提供了极大的便利。

(4) 信号处理(异常处理)

进程执行过程中一旦有变动,就可以通过信号处理服务及时处理。
1、在执行一个程序的时候,在键盘输入“CTRL+C”,这就是中断的信号,正在执行的命令就会中止退出
2、非法内存访问
3、硬件故障
4、用户进程通过kill函数,将一个用户信号发送给另一个进程

(5)进程间通信

1、消息队列方式
1)创建一个新的队列:msgget
2)发送消息到消息队列:msgsnd
3)取出队列中的消息:msgrcv
2、 共享内存方式
1)创建共享内存块:shmget
2)将共享内存映射到自己的内存空间:shmat
3)利用信号量实现隔离性
占用信号量:sem_wait
释放信号量:sem_post

(6)网络通信

网络服务是通过套接字 Socket 来提供服务的

总结图:

练习

用strace跟踪"ls -al"的系统调用
大体流程如下:

  1. 先执行execve,调用ls命令;
  2. 调用open、read、fstat、mmap、mprotect、mmap、close读取动态链库和系统配置文件;
  3. 读取passwd、group文件,获取用户信息,lstat、lgetxattr、getxattr获取文件属性,同时判断权限;
  4. 调用write输出内容;
  5. munmap释放内存,close关闭。
|| 版权声明
作者:废权
链接:https://blog.yjscloud.com/archives/74
声明:如无特别声明本文即为原创文章仅代表个人观点,版权归《废权的博客》所有,欢迎转载,转载请保留原文链接。
THE END
分享
二维码
Linux核心原理:操作系统综述
一、Linux内核 (1)内核饰演的角色 操作系统像一家软件外包公司,内核就是这家公司的老板,操作系统就是用于协调各种资源帮客户办成事情。 (2)要点 1、内核……
<<上一篇
下一篇>>
文章目录
关闭
目 录