进程的创建与并发执行

合集下载

操作系统创建进程的流程

操作系统创建进程的流程

操作系统创建进程的流程一、引言在计算机科学中,进程是指计算机中正在运行的一个程序实例。

操作系统负责管理和控制进程的创建、执行和终止。

进程的创建是操作系统的重要功能之一,本文将详细介绍操作系统创建进程的流程。

二、进程的定义进程是指在计算机系统中正在运行的一个程序实例,它具有独立的内存空间和执行环境。

每个进程都有自己的标识符(PID)和状态,可以并发地执行不同的任务。

三、进程的创建流程操作系统创建进程的流程大致可以分为以下几个步骤:1. 程序加载:首先,操作系统需要将要执行的程序从存储介质(如硬盘)加载到内存中。

这涉及到磁盘读取和内存分配等操作。

2. 内存分配:在将程序加载到内存中后,操作系统需要为新进程分配一块独立的内存空间。

这样,进程就可以在自己的地址空间中执行,而不会与其他进程相互干扰。

3. 上下文切换:在为新进程分配内存空间后,操作系统需要保存当前进程的上下文信息,包括程序计数器、寄存器等。

然后,操作系统将控制权转移到新进程,开始执行它的代码。

4. 初始化:新进程开始执行后,操作系统需要对其进行初始化。

这包括设置进程的状态、打开文件描述符、建立与其他进程的通信等。

5. 执行程序:一旦新进程被初始化,操作系统就会开始执行该进程的代码。

进程可以执行一系列指令,访问内存和设备资源,并进行各种计算和操作。

6. 进程调度:在多任务环境下,操作系统需要合理地调度进程的执行顺序。

进程调度算法可以根据不同的策略来选择下一个要执行的进程,如时间片轮转、优先级调度等。

7. 进程终止:当进程完成其任务或发生错误时,操作系统会终止该进程的执行。

在终止进程之前,操作系统会释放进程占用的内存和资源,并通知其他相关进程。

四、进程控制块(PCB)操作系统创建进程时,会为每个进程分配一个进程控制块(PCB),用于保存进程的相关信息。

PCB包括进程的标识符、状态、优先级、程序计数器、寄存器、内存分配信息等。

PCB的存在使得操作系统能够有效地管理和控制进程的创建、执行和终止。

进程概述

进程概述

进程的概念和进程的描述8.1 进程的概念8.1.1 程序的并发执行1.程序的顺序执行程序是在时间上按严格次序前后相继的操作序列,是一个静态的概念。

计算机 CPU是通过时序脉冲来控制顺序执行指令的。

一个具有独立功能的程序独占处理机直至最终结束的过程称为程序的顺序执行。

并具有如下特点:(1) 顺序性(2) 封闭性(3) 可再现性2. 多道程序系统中程序的执行多道程序系统计算机能够同时处理多个具有独立功能的程序。

这样的执行环境具有下述三个特点:(1) 独立性每道程序都是逻辑上独立的,它们之间不存在逻辑上的制约关系。

(2) 随机性(3) 资源共享3. 程序的并发执行(1) 程序的并发执行并发执行,是为了增强计算机系统的处理能力和提高资源利用率所采取的一种同时操作技术。

多道程序系统的程序执行环境变化所引起的多道程序的并发执行在某道程序的几个程序段中,包含着一部分可以同时执行或顺序颠倒执行的代码。

例如语句:read (a) ;read (b) ;它们既可以同时执行,也可颠倒次序执行。

程序的并发执行可总结为:一组在逻辑上互相独立的程序或程序段在执行过程中,其执行时间在客观上互相重叠,即一个程序段的执行尚未结束,另一个程序段的执行已经开始的这种执行方式。

程序的并发执行不同于程序的并行执行。

程序的并行执行是指一组程序按独立的、异步的速度执行。

并行执行不等于时间上的重叠。

程序的并发执行使得其执行结果不再具有封闭性和可再现性,且可能造成程序出现错误。

8.1.2 进程的定义进程的概念是60年代初期,首先在MIT 的 Multics系统和IBM 的 TSS/360系统中引用的。

(1) 进程是可以并行执行的计算部分(S.E.Madnick,J.T.Donovan);(2) 进程是一个独立的可以调度的活动(E.Cohen,D.Jofferson);(3) 进程是一抽象实体,当它执行某个任务时,将要分配和释放各种资源(P.Denning);进程和程序的区别和关系(1) 进程是一个动态概念,而程序则是一个静态概念。

操作系统的进程管理机制

操作系统的进程管理机制

操作系统的进程管理机制
操作系统的进程管理机制是指操作系统对进程的创建、调度、同步、通信和终
止等各种操作的管理方式。

进程是程序的执行实例,每个进程都有自己的地址空间、数据和代码段,以及执行时的状态信息。

首先,操作系统的进程管理机制包括进程的创建。

当用户启动程序时,操作系
统会创建一个新的进程来执行这个程序。

进程的创建包括为进程分配资源、初始化进程控制块等步骤。

其次,操作系统的进程管理机制涉及进程的调度。

进程调度是指操作系统根据
一定的策略从就绪队列中选择一个进程来执行。

常见的调度算法包括先来先服务、短作业优先、优先级调度、时间片轮转等。

此外,操作系统的进程管理机制还包括进程的同步与互斥。

在多进程环境下,
进程之间需要进行同步和互斥操作,以确保数据的一致性和正确性。

常用的同步机制有信号量、互斥锁、条件变量等。

进程的通信也是操作系统的进程管理机制的重要部分。

进程之间需要进行信息
交换和共享数据,常用的通信方式包括管道、消息队列、共享内存和信号量等。

通过这些通信方式,进程可以实现协作工作和数据传输。

最后,操作系统的进程管理机制也包括进程的终止。

当进程完成任务或发生错
误时,操作系统会终止该进程,并释放其占用的资源。

进程终止时,操作系统会清理进程控制块、关闭文件描述符和释放内存等。

总的来说,操作系统的进程管理机制是确保多个进程能够有序地执行、协作工
作和共享资源的重要手段。

通过合理的进程管理机制,操作系统可以提高系统的性能和可靠性,提升用户体验。

程序并发执行实验报告

程序并发执行实验报告

一、实验目的1. 理解并发执行的概念和原理。

2. 掌握多线程编程的基本方法。

3. 学会使用同步机制解决并发编程中的竞争条件。

4. 分析并发程序的性能和效率。

二、实验环境1. 操作系统:Windows 102. 编程语言:Java3. 开发工具:Eclipse三、实验内容1. 创建一个简单的并发程序,实现两个线程同时执行。

2. 使用同步机制解决并发程序中的竞争条件。

3. 分析并发程序的性能和效率。

四、实验步骤1. 创建一个简单的并发程序(1)创建一个名为ConcurrentTest的类,该类继承自Thread类。

(2)在ConcurrentTest类的run方法中,打印出当前线程的名字。

(3)在主函数中,创建两个ConcurrentTest对象,分别命名为thread1和thread2。

(4)启动thread1和thread2线程。

(5)等待thread1和thread2线程执行完毕。

2. 使用同步机制解决并发程序中的竞争条件(1)创建一个名为Counter的类,该类包含一个私有变量count和一个静态同步方法add。

(2)在add方法中,增加count变量的值。

(3)在主函数中,创建一个Counter对象counter。

(4)创建两个线程,分别调用counter对象的add方法。

(5)启动两个线程,并等待它们执行完毕。

3. 分析并发程序的性能和效率(1)在主函数中,记录两个线程开始执行的时间。

(2)在主函数中,记录两个线程执行完毕的时间。

(3)计算两个线程执行所需的时间差。

五、实验结果与分析1. 实验结果(1)简单的并发程序在控制台中,可以看到thread1和thread2线程交替打印出它们的名字。

(2)使用同步机制解决竞争条件在控制台中,可以看到Counter对象的count变量值正确地增加了。

(3)分析并发程序的性能和效率thread1和thread2线程执行所需的时间差为0.01秒。

2. 实验分析(1)简单的并发程序通过创建两个线程,实现了两个任务同时执行。

进程的四个基本特征

进程的四个基本特征

进程的四个基本特征进程是计算机系统中的基本概念,是指正在执行的程序的一个实例。

每个进程都具有四个基本特征:动态性、并发性、独立性和异步性。

动态性是指进程的执行是动态变化的。

进程的创建、调度、执行和终止都是动态发生的。

一个进程可以通过创建新的进程来分配工作,也可以通过等待其他进程完成工作来同步进程之间的执行顺序。

进程的动态性使得计算机系统可以根据实际的需求进行灵活的资源分配和任务调度。

并发性是指多个进程可以同时执行。

在计算机系统中,通常有多个进程同时运行,它们共享计算机资源,但又具有自己独立的运行空间。

这样多个进程可以并发执行,提高计算机系统的资源利用率和处理能力。

并发性也带来了一些问题,如进程间的竞争条件和死锁问题,需要通过合理的调度和同步机制来解决。

独立性是指进程具有独立的地址空间和资源。

每个进程都拥有自己的地址空间,包括指令、数据和堆栈等。

进程之间的数据是相互独立的,一个进程的错误不会影响其他进程的运行。

进程还具有独立的资源,如文件、设备和网络连接等。

通过独立性,进程可以实现隔离和保护,提高系统的稳定性和安全性。

异步性是指进程的执行是不可预测的。

由于进程具有独立性和并发性,它们可以以任意的顺序执行,而无法提前确定。

进程的执行受多种因素影响,如调度策略、资源竞争和外部事件等。

这种异步性带来了一定的挑战,需要通过合理的调度算法和同步机制来保证进程的正确执行。

综上所述,进程具有动态性、并发性、独立性和异步性这四个基本特征。

了解并理解这些特征对于进行进程管理和设计高效的计算机系统至关重要。

在实际应用中,我们应该合理利用进程的动态性,根据实际需求进行动态调度和资源分配;充分发挥并发性,保证系统的高效运行;充分利用进程的独立性,实现数据隔离和系统稳定性;同时,我们也需要注意进程的异步性,合理设计调度算法和同步机制,确保进程的正确执行,提高系统的可靠性和安全性。

简述创建进程的大致过程

简述创建进程的大致过程

简述创建进程的大致过程创建进程的大致过程其实就像在厨房里做一道大菜,虽然听上去复杂,但只要掌握了步骤,就能轻松上手。

首先,我们得先理解什么是进程。

简单来说,进程就是我们电脑中正在执行的程序,比如你在玩游戏、看视频,甚至在后台跑着的那些小程序,都是进程。

那我们创建一个进程究竟要经过哪些步骤呢?接下来,就让我带你深入这个神奇的世界吧!1. 准备阶段1.1 设定目标创建进程的第一步,其实就是确定你要做什么,就像准备做饭之前要先想清楚菜单。

比如,你要运行一个新程序,首先得有个可执行的文件,类似于我们厨房里要有新鲜的食材。

没有食材,你就只能对着锅发呆。

1.2 分配资源接下来,我们需要分配资源。

想象一下,你在做菜时,得先准备好锅、铲子和调料。

同样,在创建进程时,系统会给这个进程分配内存、CPU时间和其他必要的资源。

这就好比你在厨房里,锅具和调料的准备程度,直接关系到你的大菜能否顺利出锅。

2. 创建进程2.1 调用系统调用现在,真正的创建进程就要来了。

在操作系统中,我们通常会使用一个叫“fork”的系统调用,就像你在厨房里把大锅里的食材分到小锅里,准备好分开来炒。

这个步骤会复制当前的进程,生成一个新的进程,真是妙不可言。

2.2 执行新程序复制完之后,新进程还得调用“exec”系统调用,开始执行新程序。

这就像把小锅放在火上,开始炒菜一样。

此时,你会发现,之前的食材都变成了新的美味佳肴,整个过程充满期待。

3. 管理和调度3.1 进程调度新进程创建后,系统需要对它进行调度。

这就好比你在厨房里忙着做多个菜,要合理安排时间,不然菜都凉了。

操作系统通过调度算法,决定哪个进程可以使用CPU,确保每个进程都有公平的时间来“展现自我”。

3.2 资源回收当一个进程完成了它的任务,就像一道菜做好后端上桌。

可是,别忘了收拾厨房哦!操作系统会在进程结束后,回收它所占用的资源,保持系统的整洁和高效。

这样,其他的进程才能顺利运行,就像厨房干净整洁,才能做出更多美味的菜肴。

进程并发实验报告

进程并发实验报告

一、实验背景与目的随着计算机技术的发展,多任务处理和多进程并发已经成为操作系统设计中的基本要求。

为了更好地理解进程并发的基本原理和实现方法,我们进行了本次实验。

实验的目的是通过实践操作,加深对进程并发执行的理解,掌握进程创建、同步、互斥等基本概念,并学会使用相关系统调用实现进程的并发控制。

二、实验环境与工具实验环境:Windows 10操作系统,Visual Studio 2019开发环境。

实验工具:C++编程语言,WinAPI系统调用。

三、实验内容与步骤本次实验主要分为以下几个部分:1. 进程创建与并发执行- 使用CreateProcess函数创建多个进程,并观察它们的并发执行情况。

- 使用GetTickCount函数获取每个进程的执行时间,分析并发执行的效果。

2. 进程同步- 使用互斥锁(mutex)实现进程间的同步,确保同一时刻只有一个进程访问共享资源。

- 使用条件变量(condition variable)实现进程间的条件同步,实现生产者-消费者模型。

3. 进程互斥- 使用信号量(semaphore)实现进程间的互斥,避免资源竞争。

- 使用临界区(critical section)保护共享资源,防止多个进程同时访问。

4. 实验分析- 分析实验结果,总结进程并发、同步和互斥的原理和方法。

- 讨论实验中遇到的问题和解决方法。

四、实验代码示例以下是一个简单的实验代码示例,演示了使用互斥锁实现进程同步的过程:```cpp#include <windows.h>#include <iostream>using namespace std;// 全局互斥锁mutex mtx;void processFunction(){unique_lock<mutex> lock(mtx);cout << "Process " << GetCurrentProcessId() << " is running." << endl;lock.unlock();}int main(){// 创建两个进程CreateProcess(NULL, "process.exe", NULL, NULL, FALSE, 0, NULL, NULL, NULL, NULL);// 主进程继续执行cout << "Main process is running." << endl;return 0;}```五、实验结果与分析1. 进程创建与并发执行通过实验,我们观察到多个进程可以并发执行,并且每个进程的执行时间都会有所不同。

操作系统实验_实验1课案

操作系统实验_实验1课案

广州大学学生实验报告开课学院及实验室:计算机科学与工程实验室 2015年11月11日实验课操作系统成绩程名称实验项进程管理与进程通信指导老师陈康民目名称(***报告只能为文字和图片,老师评语将添加到此处,学生请勿作答***)进程管理(一)进程的创建实验一、实验目的1、掌握进程的概念,明确进程的含义2、认识并了解并发执行的实质二、实验内容1、编写一段程序,使用系统调用fork( )创建两个子进程。

当此程序运行时,在系统中有一个父进程和两个子进程活动。

让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。

试观察记录屏幕上的显示结果,并分析原因。

2、修改上述程序,每一个进程循环显示一句话。

子进程显示'daughter …'及'son ……',父进程显示'parent ……',观察结果,分析原因。

三、实验步骤1、编写一段程序,使用系统调用fork( )创建两个子进程。

代码:#include <stdio.h>main( ){int p1,p2;while((p1=fork( ))= = -1); /*创建子进程p1*/if (p1= =0) putchar('b');else{while((p2=fork( ))= = -1); /*创建子进程p2*/if(p2= =0) putchar('c');else putchar('a');}}运行结果:bca,bac, abc ,……都有可能。

2、修改上述程序,每一个进程循环显示一句话。

子进程显示'daughter …'及'son ……',父进程显示'parent ……',观察结果,分析原因。

代码:#include <stdio.h>main( ){int p1,p2,i;while((p1=fork( ))= = -1); /*创建子进程p1*/if (p1= =0)for(i=0;i<10;i++)printf("daughter %d\n",i);else{while((p2=fork( ))= = -1); /*创建子进程p2*/if(p2= =0)for(i=0;i<10;i++)printf("son %d\n",i);elsefor(i=0;i<10;i++)printf("parent %d\n",i);}}结果:parent…son…daughter..daughter..或parent…son…parent…daughter…等四、分析原因除strace 外,也可用ltrace -f -i -S ./executable-file-name查看以上程序执行过程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二进程管理2.1 进程的创建与并发执行1. 实验目的(1)加深对进程概念的理解, 理解进程和程序的区别。

(2)认识并发进程的实质。

分析进程争用资源的现象,学习解决进程互斥的方法。

(3)理解系统调用和用户命令的区别。

2. 实验类型:验证型3. 实验学时: 24. 实验原理和知识点(1)实验原理:程序的并发执行具有随机性和不可再现性。

程序并发执行会导致资源共享和资源竞争,各程序向前执行的速度会受资源共享的制约。

程序的动态执行过程用进程这个概念来描述。

由于向前推进的速度不可预知,所以多个进程并发地重复执行,整体上得到的结果可能不同。

但要注意,就其中某单个进程而言,其多次运行结果是确定的。

(2)知识点:进程、子进程、并发执行的特性;5. 实验环境(硬件环境、软件环境) :(1) 硬件环境:Intel Pentium III 以上CPU,128MB 以上内存,2GB 以上硬盘(2) 软件环境:linux 操作系统。

6. 预备知识(1) fork() 系统调用头文件:#include <unistd.h> unix standard header/* 是POSIX 标准定义的unix 类系统定义符号常量的头文件,包含了许多UNIX 系统服务的函数原型,例如read 函数、write 函数和getpid 函数*/ 函数原型:pid_t fork(void);/* 是Linux 下的进程号类型,也就是Process ID _ Type 的缩写。

其实是宏定义的unsigned int 类型*/函数功能:fork 的功能是创建子进程。

调用fork 的进程称为父进程。

如图 2.1 所示。

子进程是父进程的一个拷贝,它继承了父进程的用户代码、组代码、环境变量、已打开的文件代码、工作目录及资源限制。

fork 语句执行后,内核向父进程返回子进程的进程号,向子进程返回0。

父子进程都从fork() 的下一句开始并发执行。

返回值:返回值==-1 :创建失败。

返回值==0 :程序在子进程中。

返回值>0 :程序在父进程中。

(该返回值是子进程的进程号)编程提示:虽然子进程是父进程的一个复制品,但父子的行为是不同的。

编程时要抓住内核的返回值。

通过返回值,可以知道是父进程还是子进程,因而可以编写不同行为的代码。

⑵wait()系统调用头文件:#in clude <sys/wait.h> 函数原型:pid_t wait(i nt *status); 函数功能:wait 的功能是等待子进程结束。

直到子进程中的一个终止为止。

若没有子进程,则该调用立即返回。

函数参数:status 是子进程退出时的状态信息。

返回值:成功则返回子进程号,否则返回-1。

⑶getpid()系统调用头文件:unistd.h ,在 VC++6.0 下可以用 process.h 函数原型:pid_t getpid(void);函数功能:wait 的功能是将父进程挂起,等待子进程终止。

getpid 函数用来取得目前进程的进程ID ,许多程序利用取到的此值来建立临时文件,以避免临时文件相同带来的问题。

返回值:目前进程的进程ID 。

(4) 其他系统调用 exit -终止进程 执行一个应用程序 改变进程的优先7.实验内容与步骤(将所有截图换成用户名为你们自己姓名的拼音,并回答所有的问题)(1 )运行图2.1所示程序 将图2.1中的源程序保存为 e201.c 在终端中编译gcc p e201 e201.c运行./e201[y i n ji.aottYou Yo u ' ]S gcc -o e20i e201 . c I yi njiYouYou * )3 ./e201sonfather父退程(进程号;1869)^include <scdio .h>匸 rr.am (){ int pl;pl~fark (); ------------- t —这里裱返回1听口 if(pi==a){printf (H Bon\n n ); while (1); }else {printf (rt father\n H ): wait ();仓健进程子进程(进程号:16TO)注;子进程是父送程的一个拷贝父子送程都从下一包幵绘执行. 父子送程年发技厅°#mcl^de <stdio. h> int main(){ inE pl ; pl=fork [};t_这里披返回D if {pl==O}<printf(^sonXn"}; while(1); }else {printf(n father\n n }; wait (};图 2.1 fork()创建进程示意图发出wait 调用的进程只要有子进程,就会睡眠 exec nice此时,程序为死循环,在该终端中无法继续输入命令执行,于是,我们可以暂时不管这一个终端,而是再新建一个终端,然后键入PS -3,列出当前所有进程[yi nJiaotYouYQU ']S ps -cFID TTY TIME:C MD1 ?00s00:00ini t2 ?00:00:00oisratian/O3 ?00:00:00ksoftirqd/04 ?00100:00*atchdlog/05 ?00:00:00events/O6 ?00:00:00khelper7 ?OOsOOiOO kLhread]0 ?00:00:00kblockd/O11 ?00:00:00kacpid175 ?DOiCiO:00cqueue/D观察屏幕,是否有两个名为e201的进程。

比较它们的进程号,判别哪个是父进程,哪个是子进程。

3713 pts/1 bash3755pts/I 00:00:00 c2013756pts/1 00i00:23 e2dl3762 pts/2 00;00;00 bash3790 pts/2 00:00:00 ps[y i nj iou "]S[yinjiaotyouVou ']S kill 3755[y i njl tntYauYou " |S kill 3756 [ylnJiao»YouYou "]3 ps -eFID TTV TIME CMD1? 00:00:00 init2? OO; 00: 00 mi g rail DI)/03? 00:00:00 ksoftirqd/0程序中的while(1); 语句是为了不让程序退出来,以便于你观察进程状态。

用kill 命令把这两个进程终止。

可见,第一个终端如下图所示,已经从死循环中解救出来了。

[yinjiaotYouYou - Z&201sonfather已终止[y i n j i. noiiYouYd u *jS |当然,最简单粗暴的方法不是关闭相关进程,而是直接通过对图2.1的程序稍加改进,可看见两个进程的进程号。

#include <stdio r h>int main(){int pl:pl=fork();if(pi=e){p rlntf (' son : ^dXn * (getpid (});//whiled);}else{wait();p rintf (" fathe r:%d\n", getpid()); }ctrl+c 强制结束。

[yi nji aoaYouYou "]S gcc -c e20I e201.c I yinjiao&YouYou *]$ ./e201 ton :3B45 father :a844⑵编写一段名为e202.c 的源程序,使用系统调用fork() 创建两个子进程 pl 和p2。

pl 的功能为显示字符'b' ,p2的功能为显示字符'c',父进程的功能为显示字符'a',父进程和两个子进程并发运行。

不停的运行 e202,观察并记录屏幕上的显示结果。

程序设计过程:用while 语句控制fork() 直到创建成功。

用if 语句判别是在子进程中还是在父进程 中。

程序运行后会创建三个进程,它们分别是子进程 pl 、p2、父进程。

这三个进程并发运行。

假定子进程有些任务要做, 完成这些任务要花一定时间, 因此,可以用一个延时函数简 单地模拟这些任务。

〃e202.c#i nclude <stdio.h> void delay(i nt x) /*{int i,j;for(i=0;i<x;i++) for(j=0;j<x;j++); }int mai n() {in t p1,p2;while((p 1= fork())==-1); /* if(p1==0) /*{delay(4096); /* putchar('b');/*}else{ while((p2=fork())==-1); /* if(p2==0)/*{delay(2048); /*putchar('c'); /*}else{putchar('a');/* } }return 0;}按向上的光标键、回车,运行刚才的程序。

快速重复这个步骤,观察并记录结果。

[yi njiao^YouYou "]S gcc -o e202 [yi njiao^YcuVou ]S 4/e202bca[yinjiaottYouYou ')S ./e202 ca[ 1 injiaofiiYouYou *]S b./e2C2 a[ y i nji ao^YouYou ~ ]$ be . /e202 a[ y inJiao* You You '* ]|S be. /e202 a[ yinjiaottYouYou " js he. /e202延时函数*/创建子进程pl */ 子进程pl 创建成功*/ 子进程pl 延时*/子进程pl 显示字符'b' */创建子进程p2 */ 子进程p2创建成功*/ 子进程p2延时*/子进程p2显示字符'c' */父进程显示字符'a' */a[ y i nji ao^YouYou ~ ,|S be . /e202 a[yinjiao*YouYou *]S be ./e202 ba[yinjiaofiYauYou *]S c./e202 ca[ yinjiao®YouYolj "]$ b -/e202 ca[ yinJiao®YcuYou **]$ b . /e202 a[ yinjiaottYouYou ']$ be ./e202请回答问题:屏幕上是否有时显示 bac,有时显示bca ,…。

相关文档
最新文档