4.2-进程控制

进程控制的概念

  • 在进程生存全期间,对其全部行为的控制
  • 四个典型的控制行为
    • 创建进程
    • 阻塞进程
    • 撤销进程
    • 唤醒进程

进程的创建过程

  • 参数:(进程标识、优先级、进程起始地址、CPU初始状态、资源清单等。)
  • 创建一个空白PCB
  • 获取并服务进程标识符ID
  • 为进程分配空间
  • 初始化PCB
  • 插入相应的进程队列

image-进程的创建过程

进程的撤销过程

  • 参数:(进程ID)
  • 在PCB队列中检索出改PCB
  • 获取该进程的状态
  • 若该进程处于运行态,则立刻结束该进程
    • 递归检查是否有子进程,先“撤销”子进程
  • 释放该进程所占有的资源
  • 将进程从PCB队列中移除

进程阻塞过程

  • 参数:(阻塞原因,阻塞队列)
  • 停止进程运行
  • 修改PCB状态 “运行态” -> “阻塞态”
  • 插入相应原因的阻塞队列
  • 转调度程序

进程唤醒

  • 功能:唤醒阻塞队列中的某个进程
  • 唤醒时机/时间:
    • 系统服务由不满足变为满足
    • IO完成
    • 新数据到达
    • 进程提出新情求(服务)
  • 参数:(进程标识-> ID)

进程控制原语

原语

  • 由若干指令构成特殊功能的函数
  • 具有原子性,其操作不可分割

image-进程控制原语

Windows进程控制

通过编程启动程序

// 启动 C:\DrawRect.exe程序
system("C:\\DrawRect.exe");
WinExec("C:\\DrawRect.exe", SW_SHOWMAXIMIZED);
ShellExecute(NULL,"open","C:\\DrawRect.exe",NULL,NULL,SW_SHOWNORMAL);
CreateProcess(NULL,"C:\\DrawRect.exe",NULL,NULL,FALSE,NULL,NULL,NULL,&si,&pi);

system、WinExec、ShellExecute这三个函数都是对CreateProcess的封装。接下来看下CreateProcess创建进程的入参。

image-创建进程入参

CreateProcess()创建进程

  • 创建进程内核对象,创建虚拟地址空间
  • 装在EXE或DLL的代码和数据到地址空间中
  • 创建主线程和线程内核对象
  • 启动主线程,进入主函数(main)

启动记事本,并打开txt文件
image-代码

结束进程

  • ExitProcess
    • VOID ExitProcess(UNIT uExitCode)
  • TerminateProcess
    • TerminateProcess(HANDLE hProcess ,UINT uExitCode)

Linux进程控制

创建进程fork()

  • 新进程是当前进程的子进程
  • 父进程和子进程
    • 父进程:fork函数的调用者
    • 子进程:新创建的进程
  • 子进程是父进程的复制
  • 父进程和子进程并发运行
// 创建进程函数声明 出错返回-1
// int fork(void);
// eg:
// int pid = fork();

int main(void){
    int pid;
    pid = fork();
    if (pid == 0)
        printf("Hello World!\n");
    else if (pid > 0)
        printf("How are you!\n");
}

/*
子进程是父进程的复制(包含数据 pid初始值0),子进程执行的代码

int main(void){
    if (pid == 0)
        printf("Hello World!\n");
    else if (pid > 0)
        printf("How are you!\n");
}
*/

执行代码

[root@host ~]# ./fork
Hello World!
How are you!

exec函数簇

  • 功能
    • 装入一个指定的可执行程序运行
    • 使子进程具有和父进程【完全不同】的新功能
  • 步骤
    • 根据文件名找到相应的可执行程序
    • 将可执行程序的内容填充到子进程的地址空间
    • 进入新进程执行且不再返回
posted @ 2020-03-21 17:51  Quaint  阅读(665)  评论(0编辑  收藏  举报
……