操作系统之进程管理

[计算机操作系统汤子瀛]
1.程序顺序执行的特征
a.顺序性:每一操作必须在下一操作开始之前结束
b.封闭性:程序运行时独占全机资源,资源的状态(除初始状态外)只有本程序才能改变,程序一旦执行,其结果不受外界影响
c.可再现性:程序执行环境和初始条件相同,重复执行时,结果相同

2.程序并发执行的特征
a.间断性:程序并发运行时,共享系统资源,为完成同一任务相互合作,会形成相互制约关系,导致并发程序具有“执行-暂停-执行”这种间断性的活动规律
b.失去封闭性:程序并发执行时,资源状态由多个程序改变,某程序执行时,会受到其他程序影响,失去封闭性
c.不可再现性:失去封闭性,导致失去可再现性

3.进程的特征
a.结构特征:程序段、相关数据段和PCB三部分构成进程实体
b.动态性:进程实体的一次执行过程,具有生命期,而程序是有序指令集合,是静态的
c.并发性:多个进程同时存于内存,在一段时间内同时运行
d.独立性:进程实体是一个能独立运行、独立分配资源和独立接受调度的基本单位
e.异步性:进程按各自独立的、不可预知的速度向前推进

4.进程的状态
a.就绪状态
b.执行状态
c.阻塞状态
d.挂起状态:有些系统中引入该状态,其原因有:d1.终端用户有时希望自己程序静止下来以便解决某些问题;d2.父进程有时希望挂起自己某个子进程,以便考察、修改各子进程;d3.系统为减轻工作负荷,挂起某些进程运行;d4.OS 挂起某些进程,检查运行中的资源使用情况

5.进程控制块(PCB):PCB是进程存在的唯一标志,OS根据PCB对进程进行管理和控制
5.1PCB主要包括:a.进程标识符;b.处理机状态,如指令计数器等;c.进程调度信息,如进程状态、优先级等;d.进程控制信息,如程序和数据地址等
5.2PCB组织方式:a.链接方式:具有同一状态的PCB按关键字链接成一队列;b.索引方式:根据进程状态建立索引表,各索引表在内存首址记录在专用单元里,索引表表项记录PCB的地址

6.进程同步:多道程序环境下,程序并发执行时,由于资源共享和进程合作,各进程之间会消除相互制约关系:间接相互制约关系(如各进程共享CPU等);直接相互制约关系(如进程A通过单缓冲向进程B提供数据,缓冲为空时,进程B取不到数据而阻塞)。为实现进程互斥地进入临界区,可用软件方法,或在系统中设置专门的同步机构协调各进程间的运行。同步机制应遵循以下4条准则:

a.空闲让进
b.忙则等待
c.有限等待:要求访问临界区的进程,保证有限时间内进入自己的临界区,避免死等
d.让权等待:进程不能进入临界区时,应立即释放处理机,避免忙等

7.信号量机制:1965年,Dijkstra提出的信号量机制是一种卓有成效的进程同步工具,信号量机制的发展:整形信号量--->记录型信号量--->信号量集等

8.管程机制:信号量机制中每个进程需自备wait(S)和signal(S),管理麻烦,如果使用不当会导致死锁,而另一同步工具---管程是用数据结构对资源进行描述,即用数据结构和该数据结构上的一组操作,来表征资源,管程由三部分组成:a.局部于管程的共享变量说明;b.对该数据结构进行操作的一组过程;c.对局部于管程的数据设置初始值的语句;管程每次只允许一个进程访问,实现了进程互斥。为了实现同步,必须设置同步原语wait和signal,某进程请求资源未能满足时,管程调用wait使之排在等待队列上,当另一进程访问完毕释放资源后,管程调用signal唤醒队首进程,通常引入条件变量对等待进程进行分组

9.进程通信
信号量机制作为同步工具卓有成效,但作为通信工具是不理想的,因为:a.效率低;b.通信对用户不透明。高级通信可归结为三类:
a.共享存储器系统:a1.基于共享数据结构的通信方式:公用某些数据结构实现进程间信息交换,增加程序员负担,通信低效,适于传递少量数据;a2.基于共享存储区的通信方式:在存储器中划出一块共享存储区,实现信息交换。
b.管道通信:用于链接一个读进程和一个写进程以及实现它们之间通信的共享文件,又名pipe文件,能有效的传送大量数据,管道机制需提供:b1.互斥;b2.同步:写进程写入一定数据后,便去睡眠等待,知道读进程取走数据,再把它唤醒,当读进程读一空pipe文件,也应睡眠等待,知道些进程写入管道后,再将之唤醒;b3.确定对方存在后,才进行通信
c.消息传递系统:用的最广泛的进程间通信机制,数据的交换以格式化的消息为单位,可分为:
c1.直接通信方式:发送进程利用操作系统提供的发送命令,直接将消息发送给目标进程
c2.间接通信方式:通信通过共享数据结构的实体,称为信箱,既可实现实时通信,又可实现非实时通信。信箱暂存发送进程发送的信息,接受进程从信箱中取走信息。

11.线程:为提高资源利用率和系统吞吐量,减少并发执行时付出的时空开销,引入线程,线程的属性:
a.轻型实体:线程基本不拥有资源,除了能保证独立运行的资源
b.独立调度和分派的基本单位
c.可并发执行
d.共享进程资源

12.多线程OS中的进程
a.作为系统分配资源的基本单位
b.可包括多个线程:所有线程都只能属于一个特定进程,线程是独立运行的基本单位
c.进程不是一个可执行的实体

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
#include<iostream> #include <iomanip> using namespace std; typedef struct page { int num; int bl_num; int i; struct page *next; }p_list,*p_ptr; typedef struct memory { int data; struct memory *next; }m_list,*m_ptr; int wst[8][8]; int v,z,qy_f=0,qy_l=0,yh; void change_add(int bl_num,int me_s,int lo_ad) { int b,c; yh=lo_ad/me_s; b=lo_ad%me_s; c=bl_num*me_s+b; cout<<"页号和偏移量:"<<yh<<"---"<<b<<endl; cout<<"物理地址为:"<<hex<<c<<endl; } void init_page(p_ptr &l,m_ptr &k) { int m; m_ptr s,q; p_ptr r,p; k=new m_list; k->next=NULL; s=k; l=new p_list; l->next=NULL; r=l; for(m=0;m<v;m++) { p=new p_list; p->num=m; p->bl_num=-1; p->i=0; r->next=p; r=p; } r->next=NULL; for(m=0;m<z;m++) { q=new m_list; q->data=-1; s->next=q; s=q; } s->next=NULL; } void show_page(p_ptr l) { p_ptr r; r=l->next; cout<<"页号"<<" "<<"块号"<<" "<<"状态位"<<endl; while(r!=NULL) { cout<<" "<<r->num<<" "<<setw(2)<<r->bl_num<<" "<<r->i<<endl; r=r->next; } } void show_memory(m_ptr k) { m_ptr s; s=k->next; cout<<"主存"<<endl; while(s!=NULL) { cout<<s->data<<endl; s=s->next; } } void init_wst() { for(int i=0;i<8;i++) { for(int j=0;j<8;j++) { wst[i][j]=rand()%2; } } } void print_wst() { for(int i=0;i<8;i++) { for(int j=0;j<8;j++) { cout<<wst[i][j]<<" "; } cout<<endl; } } int rand_bl() { int bl_nu; for(int i=0;i<8;i++) { for(int j=0;j<8;j++) { if(wst[i][j]==0) { wst[i][j]=1; bl_nu=8*i+j+1; return bl_nu; } } } return bl_nu; } int pdk(m_ptr k) { int i=0; m_ptr s; s=k->next; while(s!=NULL) { if(s->data==-1) { i++; s=s->next; } else { return i; } } return i; } int mzf(m_ptr k,int page_num) { int i=0; m_ptr s; s=k->next; while(s!=NULL) { if(s->data==page_num) { return 1; } else { s=s->next; } } return 0; } int FIFO(p_ptr &l,m_ptr &k,int page_num,int bl_nu) { int m; p_ptr r; m_ptr s,t,u; u=new m_list; s=k->next; r=l->next; while(r!=NULL) { if(r->num==page_num&&r->i!=0) { break; } if(r->num==page_num&&r->i==0) { r->i=1; r->bl_num=bl_nu; qy_f++; } r=r->next; } if(pdk(k)!=0&&pdk(k)==z) { while(s!=NULL) { if(s->data==page_num) { show_page(l); show_memory(k); return 0; } s=s->next; } s=k->next; for(m=0;m<z-1;m++) { s=s->next; } s->data=page_num; z--; show_page(l); show_memory(k); return 0; } if(pdk(k)==0) { if(mzf(k,page_num)==1) { show_page(l); show_memory(k); return 0; } if(mzf(k,page_num)==0) { while(s->next!=NULL) { t=s; s=s->next; } t->next=NULL; r=l->next; while(r!=NULL) { if(r->num==s->data) { r->bl_num=-1; r->i=0; } r=r->next; } delete s; u->data=page_num; u->next=k->next; k->next=u; show_page(l); show_memory(k); } } } /*int LRU(p_ptr &l,m_ptr &k,int page_num,int bl_nu) { int m; p_ptr r; m_ptr s,t,u; u=new m_list; s=k->next; r=l->next; while(r!=NULL) { if(r->num==page_num&&r->i!=0) { break; } if(r->num==page_num&&r->i==0) { r->i=1; r->bl_num=bl_nu; qy_l++; } r=r->next; } if(pdk(k)!=0&&pdk(k)==z) { while(s!=NULL) { if(s->data==page_num) { show_page(l); show_memory(k); return 0; } s=s->next; } s=k->next; for(m=0;m<z-1;m++) { s=s->next; } s->data=page_num; z--; show_page(l); show_memory(k); return 0; } if(pdk(k)==0) { if(mzf(k,page_num)==1) { while(s->next!=NULL) { t=s; if(s->data==page_num) { } } show_page(l); show_memory(k); return 0; } if(mzf(k,page_num)==0) { while(s->next!=NULL) { t=s; s=s->next; } t->next=NULL; r=l->next; while(r!=NULL) { if(r->num==s->data) { r->bl_num=-1; r->i=0; } r=r->next; } delete s; u->data=page_num; u->next=k->next; k->next=u; show_page(l); show_memory(k); } } }*/ void main() { int lo_ad,bl_nu,bl_sz,ra_bl; p_ptr page; m_ptr memory; cout<<"请输入页表长度:"<<endl; cin>>v; cout<<"请输入块数:"<<endl; cin>>z; cout<<"请输入块的长度(b):"<<endl; cin>>bl_sz; init_wst(); init_page(page,memory); show_page(page); show_memory(memory); while(lo_ad!=-1) { ra_bl=rand_bl(); cout<<"请输入逻辑地址:"<<endl; cin>>hex>>lo_ad; change_add(ra_bl,bl_sz,lo_ad); if(yh>v-1) { cout<<"error"<<endl; continue; } cout<<dec; cout<<"FIFO:"<<endl; FIFO(page,memory,yh,ra_bl); cout<<"缺页数:"<<qy_f<<endl; } }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值