操作系统

进程通信的实例—和控制台的通信
通用计算机中,除了用户终端之外,还有一台由系统操作员控制的控制台终端。
各用户进程可将消息送到控制台进程,操作员可读到这些消息后做出相应的处理
设控制台终端由键盘和显示器组成,终端和主机之间按全双工模式发送和接收数据,即键盘和数据显示彼此独立。
设键盘控制进程和显示控制进程分别为KCP和DCP,用户进程和控制台终端的通信由会话控制进程CCP控制完成。
其中控制台键盘的输入放入和缓冲队列inbuf中,CCP可从inbuf中取出消息得到来自控制台的指示,而CCP所提出的问题则以消息形式放入控制台的输出缓冲队列outbuf中,DCP从outbuf中取出消息送至显示器,以供操作员判断。
在这里插入图片描述
当操作员按键时,KCP将对应的数据从键盘送入输入缓冲队列inbuf中,同时,也将键入数据送echobuf在显示器上显示。
KCP和CCP等之间的通信满足消息机制的条件
除了KCP和CCP的通信外,KCP实际上还在和键盘发生通信。
KCP和键盘动作KP的通信过程
设T-Ready和T-Busy分别为键盘KP和键盘控制进程KCP的私用信号量,初值为0和1.初始化{清除所有的inbuf和echobuf}

键盘控制进程KCP可描述如下:
begin
local x
P(T-Ready)
从键盘数据传输缓冲x中取出字符m记为x.m
Send(x.m)
将x.m送入echonuf
V(T-Busy)
end
假设键盘也可用进程描述,键盘动作KP:
repeat local x
P(T-Busy)
把键入字符放入数据传输缓冲x
V(T-Ready)
Until 终端关闭

显示器控制进程DCP和显示器动作DP的通信动作
设D-Ready和D-Busy分别为键盘KP和键盘控制进程KCP的私用信号量,初值为0和1.初始化{清除所有的outbuf和echo模式置为false}

begin
if outbuf满
then
receive(k)/* CCP k */
P(D-Busy)
把k送入显示器数据缓冲区
V(D-Ready)
else
echo模式置true
echobuf 中字符置入显示器数据缓冲区
fi
显示器动作DP:
repeat
If  echo模式
then
打印显示器数据缓冲区中字符
else
P(D-Ready)
打印显示器数据缓冲区中消息
V(D-Busy)
Until	显示器关机
这里,假定了一个消息的长度总是小于outbuf的长度。

CCP和KCP及DCP的接口
仍然假定1个消息的长度小于outbuf和inbuf的长度。
设过程Read(x)把inbuf中的所有字符读到用户进程数据区x处,过程Write(y)把用户进程y处的消息写道outbuf中。则过程:
inbuf-full和inbuf-empty分别是CCP和KCP的私用信号量,其初值分别为0和1。

Read(x):
Begin
P(inbuf-full)
Copy(inbuf into x)
V (inbuf-empty)
end
Write(y):
begin
P(outbuf-empty)
Copy(outbuf from y)
V(outbuf-full)
end

在KCP中,Send(m)被用来将字符一个个地送入inbuf中,Send(m)过程必须要作一定的改动,也就是要加入缓冲计数功能和把inbuf的长度看作是固定的。
outbuf-full和outbuf-empty则是DCP和CCP的私用信号量,在过程receive(k)和write(y)中使用。其初值分别为0和1。由于outbuf的长度是固定的,所以receive(k)过程也应作相应的修改。
CCP要从各用户进程那里得到提问和向提问的用户进程转达从控制台来的指示。CCP和用户进程之间存在着通信关系。
设备用户进程向CCP发出的提问,用消息组成队列RQ。各用户进程把消息送入RQ时,必须互斥操作,否则将引起RQ队列混乱。设互斥用信号量rq,初值为1.
CCP只有在用户进程提问之后才负责向控制台转发提问和向用户进程转达控制台的指示。因此,还必须为CCP设置一私用信号量question以计算用户进程所提出的问题数目。初值为0。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值