数据段及所拥有的系统资源,如已打开的文件、I/O设备等。
4) 系统开销
创建和撤销时,进程开销比线程高。同步通信线程比进程容易。
高级通信可归结为三类:共享存储器系统、消息传递系统、管道通信系统。
管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;
信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数);
消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
主要作为进程间以及同一进程不同线程之间的同步手段。
更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和SystemV的变种都支持套接字。
(1) 先来先服务调度算法(FCFS)
(2) 短作业(进程)优先调度算法(SJ(P)F)
a) 不利于长作业
b) 未考虑作业的紧迫程度
c) 由于作业(进程)的长度只是根据用户估计,不一定能真正做到短作业优先调度
优先权调度算法的类型
(1) 非抢占式优先权算法
(2) 抢占式优先权调度算法
优先权类型
1) 静态优先权
在创建进程时确定,且在进程的整个运行期间保持不表。
确定进程优先权的依据有如下三个方面:
(1) 进程类型
(2) 进程对资源的要求
(3) 用户要求
2)动态优先权
在创建进程时所赋予的优先权,是可以随着进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。
优先权 = (等待时间+要求服务时间)/要求服务时间
作业随着等待时间变长使响应比增加,但每次调度之前,都需要先做响应比的计算,会增加系统开销。
时间片大小的确定,太短有利于短作业,但是频繁的发生中断,进程上下文的切换,增加系统的开销;太长算法退化成FCFS算法。
不事先知道各个进程所需的执行时间,而且还可以满足各种类型进程的需要,被公认进程调度算法较好。
(1) 设置多个就绪队列,并为各个队列赋予不同的优先级。
(2) 当一个新进程进入内存后,首先放在第一个队列末尾,按FCFS原则排队等待调度,如果调度后还没完成,将其放到第二个就绪队列末尾。
(3) 仅当第一个队列空闲时,调度程序才开始调度第二队列中的进程运行。
多级反馈队列调度算法的性能
(1) 终端型作业用户
(2) 短批处理作业用户
(3) 长批处理作业用户
要对文件进行读写,系统首先开辟一块内存区来保存文件信息,保存这些信息用的是一个结构体,将这个结构体typedef为FILE类型。我们首先要定义一个指向这个结构体的指针,当程序打开一个文件时,我们获得指向FILE结构的指针,通过这个指针,我们就可以对文件进行操作。
size_tfread(void *buffer,size_t size,size_t count,FILE *stream);
功 能:从一个文件流中读数据,读取count个元素,每个元素size字节.如果调用成功返回count。如不成功,返回实际读取的元素个数,小于count.
参 数:buffer用于接收数据的内存地址,大小至少是size*count字节.
size单个元素的大小,单位是字节
count元素的个数,每个元素是size字节.
stream输入流
返回值:实际读取的元素个数.如果返回值与count不相同,则可能文件结尾或发生错误.
从ferror和feof获取错误信息或检测是否到达文件结尾.
元数据(Metadata)是描述其它数据的数据(data about other data),或者说是用于提供某种资源的有关信息的结构数据(structured data)。元数据是描述信息资源或数据等对象的数据,其使用目的在于:识别资源;评价资源;追踪资源在使用过程中的变化;实现简单高效地管理大量网络化数据;实现信息资源的有效发现、查找、一体化组织和对使用资源的有效管理。
在文件系统中,元数据的加锁机制是保证元数据事务操作正确进行的重要机制。
译成中文就是索引节点,它用来存放档案及目录的基本信息,包含时间、档名、使用者及群组等。
在ext2文件系统中,文件由inode(包含有文件的所有信息)进行唯一标识。一个文件可能对应多个文件名,只有在所有文件名都被删除后,该文件才会被删除。此外,同一文件在磁盘中存放和被打开时所对应的inode是不同的,并由内核负责同步。
inode表包含一份清单,其中列出了对应文件系统的所有 inode 编号。当用户搜索或者访问一个文件时,UNIX 系统通过 inode 表查找正确的 inode 编号。在找到 inode 编号之后,相关的命令才可以访问该 inode ,并对其进行适当的更改。
ext2是linux系统中高效、可靠的文件系统,可用在硬盘或可移动存储介质上。它是ext的扩展,被认为是基于速度和CPU使用的最高效的文件系统。
ext3是ext2的扩展,它在ext2的基础上增加了日志功能,或者说它是ext2的日志文件系统版本。