加深理解进程基本状态转化

一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程称为进程。简言之,进程是程序的一次执行活动,即进程就是程序的一次执行,是一个动态的过程。

进程3基本状态转化图

随着技术发展,为了最大化利用内存资源,又引入了进程优先级。一些低优先级进程可能等待较长时间,从而被对换至外存。目的是:
1.提高处理机效率:就绪进程表为空时,OS将阻塞进程从内存中“挂起”到磁盘的“挂起队列”,再从该队列选另一进程进入内存,或接受一个新进程的请求。
2.为运行进程提供足够内存:资源紧张时,暂停某些进程,如:CPU繁忙(或实时任务执行),内存紧张
3.用于调试:在调试时,挂起被调试进程(从而对其地址空间进行读写)

之后便得到了双挂起的进程状态转化模型

双挂起进程状态转化模型

下面有一个简单程序解释了进程的状态转化

#include <stdio.h>
#include <Windows.h>
#include <iostream>
#include <WinBase.h>

using namespace std;

void SubThread(){
    int i;
    for(i=0;i<5;i++){
        cout<<"SubThread  "<<i<<endl;
        Sleep(2000);
    }
}

void main(){
    cout<<"CreatThread"<<endl;
//创建新进程
    DWORD IDThread;
    HANDLE hThread;
    hThread=CreateThread(NULL,  // no security attributes
        0,  // use default stack size 
        (LPTHREAD_START_ROUTINE)SubThread,  // thread function 
        NULL,  // no thread function argument 
        0,  // use default creation flags 
        &IDThread);   // returns thread identifier 
    if(hThread==NULL)
        cout<<"Creat Thread error"<<endl;

    int i;
    for(i=0;i<5;i++){
        cout<<"Main Thread  "<<i<<endl;
        if(i==1){
            if(SuspendThread(hThread)==0xFFFFFFFF)
                cout<<"Suspend thread error"<<endl;
            else
                cout<<"Suspend thread is ok"<<endl;
        }
        if(i==3){
            if(ResumeThread(hThread)==0xFFFFFFFF)
                cout<<"Resume thread error"<<endl;
            else
                cout<<"Resume thread id ok"<<endl;
        }
        Sleep(4000);
    }
}

输出的结果应该是:
CreateThread
MainThread 0
SubThread 0
SubThread 1
MainThread 1
Suspend thread is ok
MainThread 2
MainThread 3
Resume thread is ok
SubThread 2
SubThread 3
MainThread 4
SubThread 4

这个程序分析的要点就在于:父进程运行到Sleep()时被挂机起到外存,处于就绪队列中的子进程开始运行。即时刻关注处于内存的Ready队列和处于外存的Ready队列(被挂起)。(此处不考虑双cpu等特殊情况)改变Sleep()中的值会导致输出结果的改变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值