# 进程概念

  • An operating system executes a variety of programs: 操作系统执行各种程序
    • Batch system – jobs 批处理系统 - 作业
    • Time-shared systems – user programs or tasks 分时系统 - 用户程序或任务
  • Textbook uses the terms job and process almost interchangeably. 本书使用的名词作业和进程,基本可互换
  • Allow multiple programs to loaded into memory and to be executed concurrently. 现在的操作系统多为并发执行,具有许多新的特征。引入并发执行的目的是为了提高资源利用率
  • OS 基本特性是并发与共享,即在系统中(内存)同时存在几个相互独立的程序,他们交叉地运行,并共享资源,这就会引起诸如:
    • 资源的竞争
    • 程序之间的合作与协同
    • 程序之间的通信等问题。
  • 要解决这些问题,用程序的概念已经不能描述程序在内存中运行的状态,必须引入新的概念--进程

# 顺序执行

  • 顺序环境计算机系统只有一个程序在运行,该程序独占系统中所有资源,其执行不受外界影响
  • 顺序执行的特征
    • 顺序性:按照程序结构所指定的次序(可能有分支或循环)
    • 封闭性:独占全部资源,计算机的状态只由于该程序的控制逻辑所决定
    • 可再现性:初始条件相同则结果相同。如:可通过空指令控制时间关系。

# 并发执行

  • 并发环境:一定时间内,物理机器上有两个或两个以上的程序同处于开始运行但尚未结束的状态,并且次序不是事先确定的。
  • 并发执行的特征
    • 间断 (异步) 性:“走走停停”,一个程序可能走到中途停下来,失去原有的时序关系;
    • 失去封闭性:共享资源,受其他程序的控制逻辑的影响。如:一个程序写到存储器中的数据可能被另一个程序修改,失去原有的不变特征。
    • 失去可再现性:失去封闭性 -> 失去可再现性;外界环境在程序的两次执行期间发生变化,失去原有的可重复特征。

# 进程的概念

  • 为了描述程序在并发执行时对系统资源的共享,我们需要一个描述程序执行时动态特征的概念,这就是进程。
  • Process – a program in execution; 进程 - 在执行中的程序;
  • 一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。
  • A program is a passive entity; a process is a active entity. 引入多进程,提高了对硬件资源的利用率,但又带来额外的空间和时间开销,增加了 OS 的复杂性;
  • A process includes: 一个进程包括
    • Program code
    • 当前活动,如 program counter 程序计数器和 CPU 寄存器等
    • stack 栈(临时数据,如函数参数,返回地址,局部变量等)
    • data section 数据部分(包括全局变量)

# 进程与程序

  • 进程是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行。通常进程不可在计算机之间迁移;而程序通常对应着文件、静态和可以复制。
  • 进程是暂时的,程序是永久的:进程是一个状态变化的过程,程序可长久保存。
  • 进程与程序的组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息)。
  • 进程与程序的对应关系:通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序

# 进程的特征

  • 结构特征:进程实体 = 程序段 + 相关的数据段 + PCB。
  • 动态性:进程的实质是进程实体的一次执行过程,因此动态性是进程的最基本的特征。
  • 并发性:多个进程实体同存在于内存中,且能在一段时间内同时运行。是最重要的特征。
  • 独立性:指进程实体是一个能独立运行、独立分配资源和独立接受调度的基本单位。
  • 异步性:进程按各自独立的、不可预知的速度向前推进

# 进程的类型

在系统中同时有多个进程存在,但归纳起来有两大类:

  1. 系统进程
    系统进程起着资源管理和控制的作用。
    或者:执行操作系统核心代码的进程。
  2. 用户进程
    执行用户程序的进程。

# 系统进程与用户进程的区别:

  • 资源的使用:系统进程被分配一个初始的资源集合,这些资源可以为它独占,也能以最高优先权的资格使用。用户进程通过系统服务请求的手段竞争使用系统资源;

  • I/O 操作:用户进程不能直接做 I/O 操作,而系统进程可以做显式的、直接的 I/O 操作。

  • CPU 工作状态:系统进程在管态下活动,而用户进程则在用户态(目态)下活动。

# 进程描述

进程存在意味着:

  • 处于某种状态(运行、就绪、等待);

  • 进程控制块 PCB(数据结构);

  • 进程的执行程序(一个可执行文件);

  • 进程位于某个队列 (就绪、等待某事件队列);

  • 占用某些系统资源(内存,打开某些文件、处理机、外设)

# 进程状态

As a process executes, it changes state
进程执行时,改变状态

  • new: The process is being created.
    新建:在创建进程
  • ready: The process is waiting to be assigned to a processor.
    就绪:进程等待分配处理器
  • running: Instructions are being executed.
    运行:指令在执行
  • waiting: The process is waiting for some event to occur.
    等待:进程等待某些事件发生
  • terminated: The process has finished execution.
    终止:进程执行完毕
    图1

进程的状态不是固定不变的,而是在不断变换。

# 创建 (新 new) 状态

  • OS 已完成为创建一进程所必要的工作
    已构造了进程标识符;
    已创建了管理进程所需的表格;
  • 还没有允许执行该进程
    因为资源有限.

# 就绪状态 (Ready)

存在于处理机调度队列中的那些进程,它们已经准备就绪,一旦得到 CPU,就立即可以运行(有多个进程处于此状态)

# 运行状态 (Running)

当进程由调度 / 分派程序分派后,得到 CPU 控制权,它的程序正在运行(在系统中,总只有一个进程处于此状态)

# 等待状态 (Waiting)

进程正在等待某个事件的发生(如等待 I/O 的完成),而暂停执行
即使给它 CPU 时间,它也无法执行

# 终止 (退出 exit) 状态

  • 终止后进程移入该状态;
  • 它不再有执行资格;
  • 表格和其它信息暂时由辅助程序保留
    例子:为处理用户帐单而累计资源使用情况的帐务程序;
  • 当数据不再需要后,进程 (和它的表格) 被删除;

# 其他状态:

挂起状态(调节负载,对换,父进程,操作系统,终端用户)
挂起状态的引入

  1. 终端用户的需要
    当终端用户在自己的程序运行期间,发现有可疑问题时,往往希望暂时使自己的进程静止下来,以便研究其执行情况或对程序进行修改。
    如果进程处于执行状态,则暂停执行;
    如果进程处于就绪状态,则暂时不接受调度,
  2. 父进程的需求
    父进程常常希望考察和修改子进程,或者需协调各子进程间的活动,要挂起自己的子进程。
  3. 操作系统的需要
    操作系统有时需要挂起某些进程,检查运行中资源的使用情况及进行记帐,以便改善系统的运行性能。
  4. 对换的需要
    为了缓和内存紧张的情况,将内存中处于阻塞状态的进程换至外存上。
  5. 负荷调节的需要
    当实时系统中的工作负荷较重,可能影响到对实时任务的控制时,可由系统把一些不重要或不紧迫的进程挂起,以保证系统仍然能正常运行。
    2

# 新状态转换

引入挂起状态后,又将增加新的状态转换:

  1. 活动就绪 --> 静止就绪
    当进程处于未被挂起的就绪状态时,称此为活动就绪状态 (Readya)。
    当用挂起原语 Suspend 将该进程挂起后,该进程便转变为静止就绪状态 (Readys), 处在 Readys 状态的进程,不再被调度执行
  2. 活动阻塞 --> 静止阻塞
    当进程处于未被挂起的阻塞状态时,称它处在活动阻塞状态(Blockeda)。
    当 Suspend 原语将它挂起后,进程变为静止阻塞状态(Blockeds)。
    处于该状态的进程,在其所期待的事件出现以后,将从静止阻塞变为静止就绪.
  3. 静止就绪 --> 活动就绪
    处于 Readys 状态的进程,若用激活原语 Activate 激活后,该进程将转变为 Readya 状态。
  4. 静止阻塞–> 活动阻塞
    处于 Blockeds 状态的进程,若用激活原语 Activate 激活后,进程将转变为 Blockeda 状态。

# Process Control Block (PCB) 进程控制块

  • PCB (Process Control Block): 一个专门的数据结构,系统用它来记录进程的外部特征,描述进程的运动变化过程
  • PCB 是进程管理和控制的最重要的数据结构,在创建进程时,建立 PCB,并伴随进程运行的全过程,直到进程撤消而撤消。
  • PCB 是系统感知进程存在的唯一标志,进程与 PCB 是一一对应的
  • PCB 经常被系统访问,如,调度程序、资源分配程序、中断处理程序等,所以 PCB 应常驻内存。

# Information associated with each process. 同进程有关的信息

Process state 进程状态
Program counter 程序计数器
CPU registers CPU 寄存器
CPU scheduling information CPU 调度信息
Memory-management information 内存管理信息
Accounting information 计账信息
I/O status information I/O 状态信息

2

  • 进程标识符 name
    • 每个进程都必须有一个唯一的标识符,可以是字符串,也可以是一个数字。
    • UNIX 系统中就是一个整型数。在进程创建时由系统赋予。
  • 进程当前状态 status
    • 说明进程当前所处的状态。
  • 为了管理的方便,系统将相同状态的进程组成一个队列,如就绪进程队列,等待进程则要根据等待的事件组成多个等待队列,如等待打印机队列、等待磁盘 I/O 完成队列等等。
  • 当前队列指针 next
    • 登记与本进程处于同一队列的下一个进程的 PCB 的地址

2

  • 执行程序开始地址 start-addr
  • 进程优先级 priority
    进程的优先级反映进程的紧迫程度,通常由用户指定和系统设置。
    UNIX 系统采用用户设置和系统计算相结合的方式确定进程的优先级。
  • CPU 现场保护区 cpu status
    当进程因某种原因不能继续占用 CPU 时(如:等待打印机),释放 CPU,这时就要将 CPU 的各种状态信息保护起来,为将来再次得到处理机恢复 CPU 的各种状态,继续运行。
  • 通信信息 communication information
    是指某个进程在运行的过程中要与其它进程进行通信,该区记录有关进程通信方面的信息。
  • 家族联系 process family
    进程可创建自已的子进程,子进程还可以创建,一个进程往往处在一个家族之中,就需要记录进程在家族中位置的信息。
  • 占有资源清单 own-resource
    进程占用系统资源的情况,不同系统的处理差别很大,UNIX 系统中就没有此项。

# PCB 的组织方式

  • PCB 表:系统把 PCB 组织在一起,并放在内存的固定区域,就构成了 PCB 表;
  • PCB 表的个数决定了系统中最多可同时存在的进程个数,称为系统的并发度.
  • PCB 表的组织方式
    链接方式
    索引方式

# 进程调度

  • Job queue – set of all processes in the system. 作业队列 - 在系统中的所有进程的集合
  • Ready queue – set of all processes residing in main memory,ready and waiting to execute. 就绪队列 - 在主内存中的,就绪并等待执行的所有进程的集合
  • Device queues – set of processes waiting for an I/O device. 设备队列 - 等待某一 I/O 设备的进程队列

Process migration between the various queues. 在各种队列之间进程的迁移

# 调度

  • Long-term scheduler (or job scheduler) – selects which processes should be brought into the ready queue. 长程调度(或作业调度)- 选择可以进入就绪队列的进程
    Controls the degree of multiprogramming

  • Short-term scheduler (or CPU scheduler) – selects which process should be executed next and allocates CPU. 短程调度(或 CPU 调度)- 选择可被下一个执行并分配 CPU 的进程

  • 短程调度切换频率高

  • 长程调度不快

  • 长程调度控制了多道程序的 “道”

  • 进程可以用下列方式描述:

    • I/O 型进程 - 花费 I/O 时间多于计算,许多短 CPU 处理
    • CPU 型进程 - 花费更多时间于计算,许多长 CPU 处理
  • 长期调度程序控制 I/o 绑定进程和 cpu 绑定进程的混合

  • Addition of Medium Term Scheduling 中程调度
    为了缓和内存紧张的情况,将内存中处于阻塞状态的进程换至外存上(挂起),降低多道程序的度。当这些进程重新具备运行条件时,再从外存上调入内存。

# CPU Switch From Process to Process 进程间 CPU 的切换

5

# Context Switch 上下文切换

  • 当 CPU 切换至另一个进程时,系统必须保存旧进程状态并为新进程调入所保留的状态
  • 上下文切换的时间开销较重;在切换时,系统没有做有用的工作
  • 时间取决于硬件的支持

# 进程上的操作

  • 进程是有生命周期的:产生、运行、暂停、终止。对进程的这些操作叫进程控制。
  • 进程控制的职责是对系统中进程实施有效的管理,它是 CPU 管理的一部分(还有进程同步、通信和调度)。
  • 当系统允许多进程并发执行时,为了实现资源共享、协调并发进程的关系,处理机管理必须对进程实行有效的管理。

# 进程控制

5

# 进程创建

进程何时创建?

  • 作业调度:批处理系统中,作业调度程序调度到某个作业以后,就把这个作业装入内存,并分配必要的资源,创建进程,插入就绪队列。
  • 用户登录:在分时系统中,用户在终端键入登录命令后,若是合法用户,系统建立一个进程,并插入就绪队列。
  • 提供服务:用户向系统提出请求后,系统专门建立一个进程为用户服务。(如打印请求)
  • 应用请求:应用进程的需要,由它自己创建一个新进程,使新进程以并发运行方式完成特定任务。(输入数据并将处理结果输出到表格上)

# 进程树

  • 父进程创建子进程,如此轮流创建进程下去,构成一个进程树
  • 资源共享
    父进程子进程共享所有的资源
    子进程共享父进程资源的子集
    父进程和子进程无资源共享
  • 执行
    父进程和子进程并发执行
    父进程等待,直到子进程终止
  • 地址空间
    子女复制双亲
    子女有一个程序被调入

# 进程创建的过程

  1. 申请空白的 PCB:为新进程分配唯一的数字标识符,并从 PCB 集合中索取一个空白的 PCB。
  2. 为新建立的进程分配资源:为新进程的程序和数据,以及用户栈分配必要的内存空间
  3. 初始化程序控制块:
    • 初始化标识符信息。将系统中分配的标识符、父进程标识符填入新 PCB 中。初始化处理机状态信息。是程序计数器指向程序的入口地址,栈指针指向栈顶。
    • 初始化处理机控制信息。将进程的状态设置为就绪状态或静止就绪状态。
  4. 将新进程插入就绪队列。

# UNIX examples UNIX 例子

  • 在 UNIX 系统中用户键入一个命令(如 date, ps,ls),shell 就创建一个进程。
  • fork system call creates new process fork 系统调用创建新进程
  • execlp system call used after a fork to replace the process’ memory space with a new program.
    在 fork 之后采用 execlp 系统调用用一个新程序替代进程的内存空间
  • wait (): 父亲进程处于阻塞状态,等待子进程执行完成终止后继续工作,其返回值为所等待子进程的进程号。
  • exit (): 子进程自我终止,释放所占资源
unix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
Void main(int argc, char *argv[])
{ int pid;
pid = fork(); /*fork another process*/
if (pid < 0) {/* error occurred */
fprintf(stderr, “Fork Failed”);
exit(-1); }
else if (pid == 0) { /* child process */
execlp(“/bin/ls”,”ls”,NULL);
} else { /* parent process */
wait(NULL);
printf(“Child Complete”);
exit(0);
}
}

UNIX 系统:pid=fork ();
从系统调用 fork 返回时,CPU 在父进程中时,pid 值为所创建子进程的进程号(>0),若在子进程中时,pid 的值为零。

fork 之后,操作系统会复制一个与父进程完全相同的子进程,,这 2 个进程代码空间相同(新进程和原有进程的可执行程序是同一个程序,此时程序寄存器 pc,在父、子进程的上下文中都声称,这个进程目前执行到 fork 调用即将返回 ),但是数据空间是互相独立的,子进程数据空间中的内容是父进程的完整拷贝,指令指针也完全相同,但只有一点不同,如果 fork 成功,子进程中 fork 的返回值是 0,父进程中 fork 的返回值是子进程的进程号,如果 fork 不成功,父进程会返回错误。

# 进程终止

  • 进程执行最后一项并询问操作系统作出决定(退出)
    • 从子进程向父进程输出数据)(通过等待)
    • 操作系统收回进程的资源
  • 父进程可中止子进程的执行(终止)
    • 子进程超量分配资源
    • 赋予子进程的任务不再需要
    • 父进程终止
    • 若父进程终止,不允许子进程继续
    • Cascading termination. 级联终止

进程撤销是进程处于运行下进行的

  • UNIX 系统中是通过 exit () 终止进程,释放占用的所有资源:
    释放内外存空间
    关闭所有打开文件
    释放当前目录
    释放共享内存段和各种锁 lock
  • 父进程通过系统调用 wait () 等待子进程的终止
  • 子进程已经终止,但父进程还没调用 wait,此时子进程称为僵尸进程。
  • 当父进程终止后,其子进程会以 init 为其父进程

# 进程阻塞

  • 引起进程阻塞和唤醒的事件:
    一个处在运行状态的进程,因等待某个事件的发生(如等待打印机、同步事件等)而不能继续运行时,将调用阻塞原语,把进程置为阻塞状态,并转进程调度程序(等于让出处理机)。
  • 调用进程阻塞操作是在进程处于运行状态下执行的。它的执行将引起等待某事件的队列的改变
  • 当进程所等待的事件发生时,该进程将被唤醒 (由进程唤醒操作完成)。
  • 唤醒一个进程有两种方法:
    由系统进程唤醒。
    由事件发生进程唤醒。

# UNIX 相关系统调用介绍

  1. fork (): 创建一个子进程。用它创建的子进程是 fork 调用者进程 (即父进程) 的复制品,即进程映像。除了进程标识数以及与进程特性有关的一些参数外,其他都与父进程相同,与父进程共享文本段和打开的文件,并都受进程调度程序的调度。如果创建进程失败,则 fork () 返回值为 - 1, 若创建成功,则从父进程返回值是子进程号,从子进程返回的值是 0。
  2. exec (): 装入并执行相应文件.
    因为 fork 会将调用进程的所有内容原封不动地拷贝到新创建的子进程中去,而如果之后马上调用 exec, 这些拷贝的东西又会马上抹掉,非常不划算。于是设计了一种叫作” 写时拷贝” 的技术,使得 fork 结束后并不马上复制父进程的内容,而是到了真正要用的时候才复制.
  3. wait (): 父亲进程处于阻塞状态,等待子进程执行完成终止后继续工作,其返回值为所等待子进程的进程号。
  4. exit (): 子进程自我终止,释放所占资源,通知父进程可以删除自己,此时它的状态变为 P_state= SZOMB, 即僵死状态。如果调用进程在执行 exit 时其父进程正在等待它的中止,则父进程可立即得到它返回的整数。
  5. getpid (): 获得进程号。
  6. lockf (files,founction,size): 用于锁定文件的某些段或整个文件。本函数适用的头文件为: #include<unistd.h> ,
    参数定义:
    int lockf(files,founction,size)
    int files,founction;
    long size;
    其中,files 是文件描述符,founction 表示锁定还是解锁,1 表示锁定,0 表示解锁;size 是锁定或解锁的字节数,若为 0 则表示从文件的当前位置到文件尾。
  7. kill (pid,sig):一个进程通过此系统调用向同一用户的其他进程 pid 发送一中断信号。
  8. signal (sig,founction): 捕捉中断信号 sig 后执行 founction 规定的操作。
    头文件为:#include <signal.h>
    参数定义:
    signal(sig,founction)
    int sig;
    void (*func) (); 其中 sig 共有 19 个值
  9. pipe(fd);
    int fd[2];
    其中 fd [1] 是写端,向管道中写入,fd [0] 是读端,从管道中读出。
  10. 暂停一段时间 sleep;
    调用 sleep 将在指定的时间 seconds 内挂起本进程。
    其调用格式为:“unsigned sleep (unsigned seconds);”;返回值为实际的挂起时间。
  11. 暂停并等待信号 pause;
    调用 pause 挂起本进程以等待信号,接收到信号后恢复执行。当接收到中止进程信号时,该调用不再返回。
    其调用格式为 “int pause (void);”

# 协同进程

  • 独立进程不会影响另一个进程的执行或被另一个进程执行影响
  • 协同进程可能影响另一个进程的执行或被另一个进程执行影响
  • 进程协同的优点
    Information sharing 信息共享
    Computation speed-up 加速运算
    Modularity 模块化
    Convenience 方便
  • 协作进程需要进程间通信 (interprocess communication IPC) 来交换数据和信息
  • IPC 的两种类型
    共享存储
    消息传递

# 进程间通信

# 共享存储

  • 使用共享存储模型的进程间通信要建立共享存储区
  • 进程通过读写共享存储区来交换信息
  • 由通信进程来确定交换的数据和位置,不受操作系统的控制

# 消息传递

  • 用于进程通信的机制,同步其间的活动

  • 消息系统 - 进程间通信无须再利用共享变量

  • IPC 提供两个操作 :

    • 发送固定或可变大小消息
    • 接受
  • 若 p 与 q 要通信,需要:

    • 建立通信连接
    • 通过 send/receive 交换信息
  • 通信连接的实现

    • 物理的:共享存储,硬件总线
    • 逻辑的:逻辑特性

# 生产者 - 消费者问题

  • 生产者进程生产供消费者进程消费的信息
    • 无界缓冲没有对缓冲区大小的限制
    • 有界缓冲对缓冲区大小作了限定

# 有界缓冲区 - 共享内存解决方案

  • 分享数据
  • 生产进程
  • 消费进程
  • 解决方法是正确的,但只能填满 n-1 个缓冲区。

# 直接通信

  • 进程必须显式的命名
    • send (P, message) – send a message to process P 向进程 P 发消息
    • receive (Q, message) – receive a message from process Q 从进程 Q 收消息
  • Properties of communication link 通信连接的特性
    • Links are established automatically. 连接自动建立
    • A link is associated with exactly one pair of communicating processes.
      连接精确的与一对在通信的进程相关
    • Between each pair there exists exactly one link.
      在每一对之间就存在一个连接
    • The link may be unidirectional, but is usually bi-directional.
      连接可以无向,但通常是双向的
  • 不对称交流
  • 发件人命名收件人,收件人不需要。
    send (P, message)—— 向进程 P 发送消息
    Receive (id, message)— 接收来自任何进程的消息
  • 缺点:模块化有限

# 间接通信

  • 消息导向至信箱并从信箱接收(被视作端口)
    • Each mailbox has a unique id. 每一个信箱有一个唯一的 id
    • Processes can communicate only if they share a mailbox. 仅当共享一个信箱时进程才能通信
  • 原语定义为:
    send (A, message)— 发送消息到邮箱 A
    receive (A, message)— 从邮箱 A 接收消息

# 间接通信的特性

  • Properties of communication link 通信连接的特性
    • Link established only if processes share a common mailbox
      仅当进程共有一个信箱时连接才能建立
    • A link may be associated with many processes. 连接可同多个进程相关
    • Each pair of processes may share several communication links.
      每一对进程可共享多个通信连接
    • Link may be unidirectional or bi-directional. 连接可是无向或双向的
  • Operations 操作
    • create a new mailbox 创建新的信箱
    • send and receive messages through mailbox 通过信箱发送和接收消息
    • destroy a mailbox 销毁信箱
  • 信箱共享
    P1, P2, and P3 share mailbox A. P1, P2 与 P3 共享信箱 A
    P1, sends; P2 and P3 receive. P1 发送; P2 与 P3 接受
    Who gets the message? 谁得到消息?
  • Solutions 解决方案
  • Allow a link to be associated with at most two processes.
    允许一个连接最多同 2 个进程相关
  • Allow only one process at a time to execute a receive operation.
    只允许一个时刻有一个进程执行接收操作
  • Allow the system to select arbitrarily the receiver. Sender is notified who the receiver was.
    允许系统任意选择接收者。发送者被通知谁是接收者。

# 同步

  • 消息传递可以是阻塞的,也可以是非阻塞的
  • 阻塞被认为是同步的
    阻塞发送使发送方阻塞,直到收到消息为止
    阻塞接收使接收方阻塞,直到消息可用为止
  • 非阻塞被认为是异步的
    非阻塞发送让发送方发送消息并继续
    非阻塞接收让接收方接收有效消息或为空

# 缓冲

消息队列附加在连接上;采用三个之一的实现方案

  1. Zero capacity – 0 messages 零容量 - 0 消息
    Sender must wait for receiver (rendezvous).
    发送者必须等待接收者
  2. Bounded capacity – finite length of n messages 有界容量 - n 个消息有限长度
    Sender must wait if link full.
    若连接满了发送者必须等待
  3. Unbounded capacity – infinite length
    无界容量 - 无限长度
    Sender never waits.
    发送者从不等待

# 客户端 - 服务器系统中的通信

sockets
远程过程调用
远程方法调用 (Java)

# sockets

socket 被定义为通信的端点
IP 地址和端口的连接
sockets161.25.19.8:1625 指的是主机 161.25.19.8 上的端口 1625
通信由一对 sockets 组成

# 远程过程调用

  • 远程过程调用 (RPC) 抽象了网络系统上进程之间的过程调用
  • 存根 stubs—— 服务器上实际过程的客户端代理
  • 客户端存根定位服务器,并编组参数,向服务器发送消息
  • 服务器端存根接收此消息,解包已编组的参数,并在服务器上执行该过程

# 远程方法调用

远程方法调用 (RMI) 是一种类似于 rpc 的 Java 机制
RMI 允许一台机器上的 Java 程序调用另一台机器上的方法

# 编组参数

5
客户端的存根将参数 A 和 B 以及要在服务器上调用的方法名称一起打包,并将该包发送给服务器.
服务器上的骨干会重新编排参数并调用方法 someMothod。方法执行结束后,骨干会编排从 someMothod 返回的值,并将其发回给客户机。
客户端的存根重新编排该返回值,并传递给客户机。

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

小春日和 微信支付

微信支付

小春日和 支付宝

支付宝

小春日和 wechat

wechat