进程管理——线程控制

进程控制

概念:

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

 

进程创建

功能

  • 创建一个具有指定标识(ID)的进程

参数

  • 进程标识、优先级、进程起始地址、CPU初始状态、资源清单等

过程

  • 创建一个空白PCB
  • 获得并赋予进程标识符ID
  • 为进程分配空间
  • 初始化PCB
  • 插入相应的进程队列(就绪队列)

伪代码:

Create (Si,Mi,Pi)                //CPU的状态、内存、优先级
{
    p=Get_New_PCB();             //分配新的PCB
    pid=Get_New_PID();           //分配进程的PID
    p->ID=pid;                   //设置进程的PID
    p->CPU_State=Si;             //CPU的状态
    p->Memory=Mi;                //内存
    p->Priority=Pi;              //优先级
    p->Status.Type="Ready";      //进程状态
    p->Status.List=RL;           //进程队列RL:Ready List
    ………………
    Insert (RL,p);               //将进程p插入就绪队列
    Scheduler();                 //调度程序
}

 

进程撤销

功能:

  • 撤销一个指定的进程
  • 收回进程所占有的资源,撤销该进程PCB

进程撤销的时机/事件

  • 正常结束
  • 异常结束
  • 外界干预

参数

  • 被撤销的进程名(ID)

进程撤销的实现(过程)

  • 在PCB队列中检索出该PCB
  • 获取该PCB状态
  • 若该进程处在运行态,立即终止该进程(递归:检查是否有子进程,先撤销子进程)
  • 释放进程所占资源
  • 将进程从PCB队列中移除

 

进程阻塞

功能:停止进程的执行,变为阻塞

 

阻塞的时机/事件

  • 请求系统服务
  • 启动某种操作
  • 新数据尚未到达
  • 无新工作可作

参数:

  • 阻塞原因
  • 不同原因构建有不同的阻塞队列

进程阻塞的实现

  • 停止运行
  • 将PCB“运行态”改“阻塞态”
  • 插入相应原因的阻塞队列
  • 转调度程序

 

进程唤醒

功能:唤醒处于阻塞队列当中的某个进程

时机/事件

  • 系统服务由不满足到满足
  • I/O完成
  • 新数据到达
  • 进程提出新请求(服务)

参数:被唤醒进程的标识

 

进程控制原语

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

进程控制原语

  • 创建原语
  • 撤销原语
  • 阻塞原语
  • 唤醒原语

 

windows进程控制

windows中如何通过编程启动exe程序创建进程

例子:通过编程启动“C:DrawRect.exe”程序

system ("C:\\DrawRec.exe");
WinExec("C:\\DrawRec.exe",SW_SHOWMAXIMIZED);
shellExecute(NULL,"open","C:\\DrawRec.exe",NULL,NULL,SW_SHOWMAXIMIZED);
CreateProcess(NULL,"C:\\DrawRec.exe",NULL,NULL,FALSE,NULL,NULL,NULL,&si,&pi);

创建新进程

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

结束进程

  • ExitProcess:void ExitProcess(uint uExitCode)
  • TerminateProcess(强制):TerminateProcess (handle hProcess,uint uExitCode)

 

Linux进程控制

创建进程——fork()

pid_t fork (void)    pid_t是整型

  • 新进程是当前进程的子进程
  • 父进程和子进程

                   父进程:fork()的调用者

                   子进程:新建的进程

  • 子进程是父进程的复制

fork返回值pid

  • 在子进程中,pid=0
  • 在父进程中,pid>0(子进程ID)
  • 出错:pid=-1

 

进程执行与父进程不同的功能

exec函数簇(包含若干函数)

功能:

  • 装入一个指定的可执行程序运行
  • 使子进程具有和父进程完全不同的新功能

步骤:

  • 根据文件名找到相应的可执行程序
  • 将可执行程序的内容填入子进程的地址空间
  • 进入新进程执行且不再返回
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值