操作系统

tyle="margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial; color:rgb(51,51,51)">

数据段及所拥有的系统资源,如已打开的文件、I/O设备等。

4) 系统开销

创建和撤销时,进程开销比线程高。同步通信线程比进程容易。

关于IPC(进程间通信)

高级通信可归结为三类:共享存储器系统、消息传递系统、管道通信系统。

管道(Pipe)及有名管道(named pipe):

管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;

信号(Signal):

信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数);

报文(Message)队列(消息队列):

消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。

共享内存:

使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。

信号量(semaphore):

主要作为进程间以及同一进程不同线程之间的同步手段。

套接口(Socket):

更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和SystemV的变种都支持套接字。

内存调度

1.  先来先服务和短作业(进程)优先调度算法

(1)     先来先服务调度算法(FCFS)

(2)     短作业(进程)优先调度算法(SJ(P)F)

a)    不利于长作业

b)   未考虑作业的紧迫程度

c)    由于作业(进程)的长度只是根据用户估计,不一定能真正做到短作业优先调度

2.高优先权优先调度算法

优先权调度算法的类型

(1)     非抢占式优先权算法

(2)     抢占式优先权调度算法

优先权类型

1)    静态优先权

在创建进程时确定,且在进程的整个运行期间保持不表。

确定进程优先权的依据有如下三个方面:

(1)     进程类型

(2)     进程对资源的要求

(3)     用户要求

2)动态优先权

       在创建进程时所赋予的优先权,是可以随着进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。

3.最高相应比优先调度算法

优先权 = (等待时间+要求服务时间)/要求服务时间

作业随着等待时间变长使响应比增加,但每次调度之前,都需要先做响应比的计算,会增加系统开销。

4.基于时间片的轮转调度算法

1.时间片轮转法

       时间片大小的确定,太短有利于短作业,但是频繁的发生中断,进程上下文的切换,增加系统的开销;太长算法退化成FCFS算法。

2.  多级反馈队列调度算法

不事先知道各个进程所需的执行时间,而且还可以满足各种类型进程的需要,被公认进程调度算法较好。

(1)     设置多个就绪队列,并为各个队列赋予不同的优先级。

(2)     当一个新进程进入内存后,首先放在第一个队列末尾,按FCFS原则排队等待调度,如果调度后还没完成,将其放到第二个就绪队列末尾。

(3)     仅当第一个队列空闲时,调度程序才开始调度第二队列中的进程运行。

多级反馈队列调度算法的性能

(1)     终端型作业用户

(2)     短批处理作业用户

(3)     长批处理作业用户

文件系统

Fread的过程

要对文件进行读写,系统首先开辟一块内存区来保存文件信息,保存这些信息用的是一个结构体,将这个结构体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获取错误信息或检测是否到达文件结尾.

在文件系统中,元数据(比如ext2中的inode)的基本作用是什么?ext2跟ext3的根本区别是什么?

元数据(Metadata)是描述其它数据的数据(data about other data),或者说是用于提供某种资源的有关信息的结构数据(structured data)。元数据是描述信息资源或数据等对象的数据,其使用目的在于:识别资源;评价资源;追踪资源在使用过程中的变化;实现简单高效地管理大量网络化数据;实现信息资源的有效发现、查找、一体化组织和对使用资源的有效管理。

在文件系统中,元数据的加锁机制是保证元数据事务操作正确进行的重要机制。

Inode

译成中文就是索引节点,它用来存放档案及目录的基本信息,包含时间、档名、使用者及群组等。

在ext2文件系统中,文件由inode(包含有文件的所有信息)进行唯一标识。一个文件可能对应多个文件名,只有在所有文件名都被删除后,该文件才会被删除。此外,同一文件在磁盘中存放和被打开时所对应的inode是不同的,并由内核负责同步。

inode表包含一份清单,其中列出了对应文件系统的所有 inode 编号。当用户搜索或者访问一个文件时,UNIX 系统通过 inode 表查找正确的 inode 编号。在找到 inode 编号之后,相关的命令才可以访问该 inode ,并对其进行适当的更改。

ext2是linux系统中高效、可靠的文件系统,可用在硬盘或可移动存储介质上。它是ext的扩展,被认为是基于速度和CPU使用的最高效的文件系统。

ext3是ext2的扩展,它在ext2的基础上增加了日志功能,或者说它是ext2的日志文件系统版本。


原文地址:https://www.cnblogs.com/snake-hand/p/3206337.html