Linux下I/O模式简介

   1.基本操作系统概念(Linux)

    1.1 Linux操作系统运行机制

              Linux操作系统采用虚拟存储器来进行寻址操作,而Linux操作系统的主心骨则是内核,那么什么是内核呢,我们知道一个计算机操作系统由硬件和软件组成,它们相互依赖不可分割。硬件的操作软件就称之为操作系统,在Linux中就称之为内核。它主要包括:存储管理、CPU管理、进程管理、文件管理、设备管理、驱动管理、网络通信、系统调用等等。当然为了保证操作系统的正常运作,所以用户是不能直接操作内核的,正常的调用过程分为三个过程:用户程序执行、用户程序通过系统调用操作内核、内核操作硬件完成功能计算。当然为了,保证内核不被用户直接操作,操作系统将虚拟地址空间划分为两部分,内核空间和用户空间,用户只能操作属于用户的用户地址空间,从而保证了内核的安全。

     1.2 进程

              进程时操作系统的核心,它是一个独立的可调度活动,你可以把它抽象为一个实例单元,它是一个具有独立功能的程序关于某个数据集合的一次执行过程,在操作系统中,进程也是资源分配的最小单位。也可以理解为,我们所编写的代码放在磁盘空间中,只是单纯的数据集合,那么进程呢,当我们将编译出的可执行文件运行后,那么一个进程也就产生了,它是一个动态的概念。那么我们的操作系统中存在很多进程,而我们的CPU数量是有限的,所以内核为每一个进程都分配了一个属于它自己的时间片,通过时间片来进行CPU的使用权限,那么为了控制进程之间的切换,内核要进行统一管理和调度,首先:保存进程当前上下文、包括程序计数器和寄存器信息等,更新当前进程控制块信息(PCB),把进程控制块移入相关调度队列,选择一个就绪的进程,更新它的PCB和当前内存管理数据结构,恢复上下文信息等。那么进程切换完成,我们可以看出进程切换时比较消耗时间的。那么,正在的执行的进程,由于某些调度事件发生,可能由系统调用自动执行阻塞,使进程由运行状态变为阻塞状态,等待条件满足,再切换成就绪状态,可以看出进程阻塞是一种进程本身的主动行为,正是由于这些行为操作系统才能进行能力的利用最大化。

      1.3 I/O概念

                我们知道Linux下一切皆文件,那么怎么样对这些文件进行有效的管理呢,那么文件描述符应运而生,文件描述符是Linux下抽象出的一种标识文件的概念或者术语。它是一个非负整数。Linux下通过一个文件描述符集合来映射管理所有文件。I/O呢?I/O(input/output),即输入和输出端口,操作系统每一个设备都有一个专有的I/O地址用来处理输入输出信息。CPU与外部设备之间的通信连接和数据交换都需要通过I/O地址来实现。Linux内核将所有外部设备都看作一个文件来操作,应用程序通过调用文件操作的系统调用来与内核进行交互,来实现设备的访问和操作。Linux下I/O操作又分为Linux系统提供的I/O方法和C接口提供的I/O操作方法,两者区别在于C标准在用户空间进行了一层封装,基于流式的操作方法,通过在用户空间创建缓冲区来减少系统调用的次数来提高效率。在Linux的缓存I/O机制中,操作系统会将I/O的数据缓存在文件系统的page cache中,数据会先被拷贝到page cache中,操作系统定时将page cache中的数据刷新到磁盘。之前项目中就遇到过一个日志丢失的问题,公司服务器意外断电,导致0号日志直接为空,经过定位发现是page cache还没有刷新到磁盘时,系统断电导致数据丢失,解决八法是在让内核开发人员对系统默认刷新时间进行调节,但是这样会影响系统性能。

 2.I/O模型

       对于一次I/O操作,数据首先被拷贝到操作系统的内核缓冲区中,然后才会从操作系统的内核缓冲区将数据拷贝到应用程序。这中间将经历两个过程:

            -等待数据准备

            -将数据从内核拷贝到用户

        由于这种不持续的过程,操作系统为了提高自身的性能,才设计出以下5中I/O网络模型,来满足用户进行实际生产中的需求。

            1.阻塞I/O

            2.非阻塞I/O

            3.I/O多路复用

            4.信号驱动I/O

            5.异步I/O

具体的I/O模型接下来会一种一篇文章的形式来进行解释。

你可能感兴趣的:(Linux修服务器编程)