Linux操作系统包含以下各子系统:

 

 

 

系统调用子系统:操作系统的功能调用同一入口;

进程管理子系统:对执行程序进行生命周期和资源管理;

内存管理子系统:对系统的内存进行管理、分配、回收、隔离;

文件子系统    :系统内部一切皆文件,对文件进行管理;

设备子系统    :对输入、输出设备进行管理;

网络子系统    :负责对外交流,网络协议栈和收发网络包。

内核结构图如下:

 

 

 

1.虚拟文件系统VFS

  位于用户空间和内核具体文件系统之间,是各种具体的文件系统提取出来的抽象层,为用户提供标准的文件系统调用接口。对具体的文件系统的数据结构进行抽象,以统一的接口进行处理调用(readopen)。

 

 

 

1. 系统IO操作(接口)

包括:a.基本文件操作:openreadwrite;  b.文件锁(避免多个用户进程对同一文件竞争操作,fcntl()对文件进行上锁),解决文件共享问题;  c.多路复用:解决I/O复用问题(系统接口重复使用)

2.1.linux IO模型(5种)

应该是:同步阻塞IO、同步非阻塞IO、多路复用IO、信号驱动IO、异步IO

  阻塞IO模型:系统调用的IO(接口)函数未完成,一直阻塞挂起,直到数据拷贝完成

  非阻塞IO模型:无论应用程序在系统调用时是否完成,都立即返回!

  多路复用IO模型:系统调用未完成,函数等待,系统IO还可以操作其他的函数调用;(多功能)

  异步IO:进程先让内核完成IO操作,内核在通知进程操作完成;(分道)

前四种都是同步IO,只有最后一种才是异步IO

2.2多路复用IOepollpollselect函数)

  selectpoll基本是差不多的,除了select监听事件个数限制(1024个),其他和poll没有太大区别。用户程序每次监听,都要将其监听事件集从用户态拷贝到内核态执行,然后再返回用户态,一旦有事件触发,只能通过遍历的方式才能找到触发事件,开销很大。

  Epoll最优秀的多路复用机制!监测无上限,在注册新事件时只需一次拷贝所有监听事件到内核即可epoll是只关心活跃的fd,通过回调机制无序遍历,提高效率。

3标准IO操作

  基本的IO操作(readwriteopen都没有缓冲空间,用户程序必须要从用户态切换至内核态,执行相应的命令操作,再返回用户态继续执行代码。 -> 为提高用户程序执行效率,Linux还提供了标准IO操作(fopen()fread()fwrite()gets()puts()等,r,rb+,w.wb+)。带缓冲区的,基于流缓冲,将数据尽量多的写入缓存区再一次性读取,减少用户态内核态用户态的切换,提高程序执行效率。

版权声明:本文为hjh-666原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/hjh-666/p/11449451.html