操作系统(2)

系统调用类型

系统调用类型可以分为五大类:

  • 进程控制
  • 文件管理
  • 设备管理
  • 信息维护
  • 通信

进程管理

运行程序需要能正常或非正常地中断(end或abort),如果一个系统调用非正常中断,那么会有内存信息转储并产生一个错误信息,内存信息转储通常写在磁盘上,并被调试器检查和确定原因。无论是正常还是非正常中断,操作系统都必须把控制权转交给调用命令解释器。命令解释器调用下一条指令。
如果创建一个新作业,必须保证它是可控的,这种控制要求能决定或重置进程或作业的属性,包括作业的优先级、最大允许执行时间等。

分层方法

系统模块化有许多方法,一种是分层法,即操作系统分成若干层,最底层为硬件,最高层为用户接口。分层法的主要优点在于构造和调试的简单化,每层只能调用更底层的功能和服务。分层法的主要困难涉及对层的详细定义。

进程

进程不止是程序代码,还包括当前活动,通过程序计数器的值和处理器寄存器的内容来表示。进程还包括进程堆栈段(包括临时数据,如函数参数、返回地址和局部变量)和数据段(包括全局变量)。进程还包括堆(heap),是在进程运行期间动态分配的内存。
当一个可执行文件被装入内存的时候,一个程序才成为进程,装载程序通常有两种方法,即双击一个代表可执行文件的图标或者在命令行中输入该文件的文件名(如a.exe或a.out)。
进程在执行过程中会改变状态,每个进程可能处于下列状态之一:

  • 新的:进程正在被创建。
  • 运行:指令正在被执行
  • 等待:进程等待某个事件的发生(如IO完成或收到信号)
  • 就绪:进程等待分配处理器
  • 终止:进程完成执行

每个进程在操作系统内用进程控制块(process control block)来表示(一个进程对应一个PCB),它包含以下信息:

  • 进程状态
  • 进程编号
  • 程序计数器。表示下个要执行的指令地址。
  • CPU调度器。这包括进程优先级、调度队列的指针和其他调度参数。
  • 寄存器
  • 内存界限
  • 打开文件列表

多道程序设计和分时系统的目的是无论何时都有线程在运行,从而使CPU利用率达到最大化。进程调度选择一个可用的线程到CPU上执行。

调度队列

进程进入系统后,会被加到作业队列中,该队列包括系统中的所有进程。驻留在内存中的就绪的、等待运行的进程保存在就绪队列中,该队列通常由链表实现,其头尾结点指向链表的第一个和最后一个PCB的指针。每个PCB包括一个指向就绪队列的下个PCB的指针域。
操作系统也有其他队列,当给进程分配了CPU之后,它开始执行或者最终完成,或者被中断,或等待特定时间发生。由于系统有很多进程,磁盘可能忙于其他进程的IO请求,因此该进程可能需要等待磁盘。等待IO设备的进程队列称为设备队列。
进程可能创建一个子进程并等待其结束,当一个进程从所有队列中删除,其PCB和资源才得到释放。

调度程序

进程在其生命周期内会在各种调度队列内迁移,为了调度,操作系统必须按某种方式在这些队列中选择进程,进程选择是由相应的调度程序(scheduler)来执行的。通常对于批处理系统,进程更多地是被提交,而不是马上执行,这些进程被放到大容量磁盘的缓冲池中,保存在那里以便以后执行。长期调度程序(long-term scheduler)或作业调度程序(job scheduler)从缓冲池中选择进程,并装入内存准备执行。短期调度程序(short-term scheduler)或CPU调度程序从准备执行的进程中选择进程,并为之分配CPU。
这两个调度程序的区别在于调用频率。短期调度程序至少每100ms执行一次,如果需要10ms来确定一个运行100ms的线程,那么10/100+10的时间会浪费在进程调度上。

上下文切换

中断使CPU从当前进程改变为运行内核小程序,这样的切换在通用系统中很频繁,当发生中断的时候,系统需要保存当前运行CPU上进程上的上下文,从而在处理完成之后可以恢复上下文。进程上下文用进程的PCB表示,它包括CPU寄存器的值、进程状态和内存管理信息等。
将CPU切换到另一个进程需要保存当前进程的状态并恢复另一个进程的状态,这个任务称为上下文切换(context switch)。

进程创建

当进程创建新进程的时候,有两种可能:

  • 父进程和子进程并发执行。
  • 父进程等待,直到某个或全部子进程执行完。

新进程的地址空间也有两种可能:

  • 子进程是父进程的复制品(具有与父进程相同的程序和数据)
  • 子进程装入另一个新程序

在UNIX系统中,每个进程用唯一的整数标识,通过fork()系统调用,可创建新进程。新进程通过复制原来的地址空间而形成。通常在系统调用fork() 之后,一个进程会使用系统调用exec() ,以用新程序来取代进程的内存空间。

进程终止

当进程执行最后的语句并使用系统调用exit()请求操作系统删除自身时,进程终止。这时,进程可以返回状态值(通常是整数)到父进程(通过系统调用wait()),所有资源被释放。

进程间通信

操作系统内并发执行的进程可以使独立进程或协作进程,如果一个进程不被其他进程所影响也不影响其他进程,那么它是独立的,相反则是协作进程。
协作进程需要一种进程间通信机制(interprocess communication)来允许进程交换数据和信息,有两种共享模式:

  • 共享内存。建立一块供协作进程共享的内存区域,进程通过写入或读取数据来交换信息。
  • 消息传递。

客户机和服务器通信

Socket(套接字)可以定义为通信的端点,一对通过网络通信的进程需要一对socket,socket由一个IP地址和一个端口号组成。服务器通过监听端口来等待进来的客户端请求,一旦收到请求,服务器就接受来自客户端socket的连接,从而完成连接。服务器实现的特定服务(talnet/http/ftp)是通过监听众所周知的端口实现的。(ftp20,http80,https443)。

这篇主要了介绍了进程相关,下一篇会详细介绍线程和CPU调度操作系统(3)

猜你喜欢

转载自blog.csdn.net/sysuzhyupeng/article/details/78447074