操作系统笔记_操作系统概念

进程

进程本质上是在执行的一个程序,进程可以在其地址空间中进行读写,该地址空间中放有可执行程序,程序数据,以及堆栈。进程基本上是容纳运行一个程序所需要的所有信息的容器。

通常,我们会在电脑上打开一个微信,然后并不会一直使用它,工作时可能会打开代码编辑器,这样我们就至少有了两个活动进程(还有其他后台进程,例如:邮件客户端)。

进程表

进程表是数组(或链表)结构,用来保存与进程有关的所有信息(除该进程自身地址空间的内容以外)

一个挂起的进程包括:进程的地址空间,往往称作磁芯映像,以及对应的进程表项。

进程间通信

An9311.png
一个进程可以创建多个子进程,而这些进程又可以创建子进程,因此,可以得到进程树。

合作完成某些作业的相关进程经常需要彼此间相互通信,以同步它们的行为,这种通信称为进程间通信

地址空间

通常,每个进程有一些可以使用的地址集合,典型从 0 开始直到某个最大值。

shell

UNIX 的命令解释器,shell 本身不是操作系统的一部分。
shell 有许多种,如: sh , ksh , csh 及 bash。

系统调用

某种意义上,进行系统调用就像进行一个特殊的过程调用,但是只有系统调用可以进入内核,而过程调用则不能。

1
count=read(fd,buffer,nbytes);

以这个 C 程序为例,这个方法是调用一个名为 read 的库过程,第一个参数指定文件,第二个参数指明缓冲区,第三个说明要读出的字节数。

系统调用由一系列步骤实现

AuSBkQ.png

  • 首先会将参数压入堆栈(1-3)。
  • 接着调用 read 库过程。库过程可能由汇编编写,会执行指令将用户态切换到内核态,并开始执行库过程。
  • 执行完毕,返回到用户程序。

用于进程管理的系统调用

在 UNIX 中,fork 是唯一可以创建进程的途径,它创建一个原有进程的精确副本,包括所有的文件描述符,寄存器等全部内容。

UNIX 的进程将其存储空间划分为三段:正文段(如程序代码)、数据段(如变量)以及堆栈段。数据段向上增长而堆栈段向下增长。

AK11gI.png

用于文件管理的系统调用

UNIX 为每个文件保存了该文件的类型(普通文件,特殊文件,目录等),大小,以及其他信息。

读写文件时,首先使用 open 打开文件,可以用代码指定读、写、或两者,使用完毕后,close 关闭文件,使得该文件描述符在后续的 open 中再次使用。