1进程调度就绪进程最重要的特征是该进程是非阻塞的。进行用户交互、大量读写文件、响应I/O和网络事件的进程会花费大量时间来等待资源可用,在相当长的时间内无法转为就绪状态(长是相对于指令运行时间而言),因此就绪进程首先应该是非阻塞的。一个就绪进程还必须至少有部分“时间片”(调度器分配给进程的运行时间)。内核用一个就绪队列维护所有的就绪进程,一旦某进程耗光它的时间片,内核就将其移出队列,直到所有就绪进程
在进程的创建上,Unix采取了一种有趣和少见的处理方法:它将进程的创建和加载一个新二进制镜像分离。Unix提供了两个系统调用fork和exec。创建进程:缺省情况下,内核将进程ID的最大值限制为32768,2^15。系统管理员可以设置/proc/sys/kernel/pid_max的值来突破这个缺省的限制,但会牺牲一些兼容性。创建新进程的那个进程称为父进程,而新进程被称为子进程。每个进程都是由其他
Linux内核实现I/O主要在三个内核子系统:虚拟文件系统(VFS),页缓存,和页回写。虚拟文件系统(有时也叫做virtualfileswitch)是一种Linux内核的文件操作的抽象机制。它允许内核在无需了解文件系统类型的情况下,使用文件系统函数和操作文件系统数据。VFS实现这种抽象的方法是使用一种通用文件模型,它是所有Linux文件系统的基础。基于函数指针和各种面向对象方法,通用文件模型提供了
当程序进行IO时,如果数据尚未准备好,那么IO将处于阻塞状态。当某个进程有多个打开的文件,比如socket,那么其后的所有准备好读写的文件将受到阻塞的影响而不能操作。不借助线程,单一进程无法在同一时间服务多个文件描述符。非阻挡式IO可以作为一个解决方案,但是效率并不高。首先进程需要不断发IO请求,其次,如果程序可以休眠,让出CPU将提高效率。多任务式IO是在其中任何一个文件描述符就绪时收到通知,此
直接文件IO与其他现代操作系统内核一样,Linux内核实现了一个复杂的缓存、缓冲以及设备和应用之间的I/O管理的层次结构。一个高性能应用可能希望越过这些复杂的层次结构并进行独立的I/O管理,如数据库系统,比较倾向于使用他们自己的缓存机制,以尽可能的减少操作系统的影响。系统提供O_DIRECT标志给open系统调用,会绕过内核的页面缓存,直接启动用户空间的缓冲区与设备之间的IO,所有IO将会同步,直
块做为文件系统的抽象,它是I/O中最基本的概念——所有的磁盘操作都是基于块进行的。因此,当请求以块大小整数倍对齐地址时,I/O效率是最理想的。操作效率随着系统调用次数的增多而急剧下降,例如,每次读一字节读1024次与一次读1024字节相比,显然后者效率更优。如果长度不是block的整数倍,即使每次以大于块的长度进行一系列的操作,其效率也不是最理想的。例如块的大小是1K,每次以1130字节的长度操作
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号