楼宇对讲系统接线图L+,L-是什么信号量

进程与线程的一个简单解释 - 阮一峰的网络日志
进程与线程的一个简单解释
(process)和(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。
最近,我读到一篇,发现有一个很好的类比,可以把它们解释地清晰易懂。
计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。
假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候,其他车间都必须停工。背后的含义就是,单个CPU一次只能运行一个任务。
进程就好比工厂的车间,它代表CPU所能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。
一个车间里,可以有很多工人。他们协同完成一个任务。
线程就好比车间里的工人。一个进程可以包括多个线程。
车间的空间是工人们共享的,比如许多房间是每个工人都可以进出的。这象征一个进程的内存空间是共享的,每个线程都可以使用这些共享内存。
可是,每间房间的大小不同,有些房间最多只能容纳一个人,比如厕所。里面有人的时候,其他人就不能进去了。这代表一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。
一个防止他人进入的简单方法,就是门口加一把锁。先到的人锁上门,后到的人看到上锁,就在门口排队,等锁打开再进去。这就叫(Mutual exclusion,缩写 Mutex),防止多个线程同时读写某一块内存区域。
还有些房间,可以同时容纳n个人,比如厨房。也就是说,如果人数大于n,多出来的人只能在外面等着。这好比某些内存区域,只能供给固定数目的线程使用。
这时的解决方法,就是在门口挂n把钥匙。进去的人就取一把钥匙,出来时再把钥匙挂回原处。后到的人发现钥匙架空了,就知道必须在门口排队等着了。这种做法叫做(Semaphore),用来保证多个线程不会互相冲突。
不难看出,mutex是semaphore的一种特殊情况(n=1时)。也就是说,完全可以用后者替代前者。但是,因为mutex较为简单,且效率高,所以在必须保证资源独占的情况下,还是采用这种设计。
操作系统的设计,因此可以归结为三点:
(1)以多进程形式,允许多个任务同时运行;
(2)以多线程形式,允许单个任务分成不同的部分运行;
(3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。
域名是互联网的基础设施,只要上网就会用到。
学习编程其实就是学高级语言,即那些为人类设计的计算机语言。
现在,各种加密货币(cryptocurrency)不计其数。
比特币(bitcoin)诞生于2008年的一篇论文。博客访问: 27376
博文数量: 46
注册时间:
本人码云地址:https://gitee.com/scott-zhu
分类: Linux操作系统 17:14:55
阅读(100) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。【台州楼宇对讲系统室内分机价格】价格_厂家_图片 -Hc360慧聪网
您是不是在找:
买家还在看:
商品数量:
广东省&珠海市
手机访问店铺
台州楼宇对讲系统室内分机价格
[商品已下架]
相关商品推荐
&888.00/套
&160.00/款
&1.00/台
&1.00/台
商家等级:
所在地区:
广东省 珠海市
认证信息:
编码方式:
同参数产品
同参数产品
同参数产品
同参数产品
信号传输:
同参数产品
正在加载中........
慧聪网厂家珠海名科电子科技有限公司为您提供台州楼宇对讲系统室内分机价格的详细产品价格、产品图片等产品介绍信息,您可以直接联系厂家获取台州楼宇对讲系统室内分机价格的具体资料,联系时请说明是在慧聪网看到的。
热门商品推荐
我的浏览记录
门铃相关资源
门铃相关热门专题
您在慧聪网上采购商品属于商业贸易行为。以上所展示的信息由卖家自行提供,内容的真实性、准确性和合法性由发布卖家负责,请意识到互联网交易中的风险是客观存在的。推荐使用慧付宝资金保障服务,保障您的交易安全!
按字母分类 :
让慧聪网撮合专家为您解决采购难题
您采购的产品:
请输入采购产品
您的手机号码:
请输入手机号码
*采购产品:
请输入采购产品
*采购数量/单位:
请输入采购数量
请选择单位
*采购截止日期:
请输入正确的手机号码
请输入验证码
*短信验证码:
<input id="valid_Code1" maxlength="6" placeholder="请输入验证码" name="VALIDCODE" class="codeInput" onkeyup="this.value=this.value.replace(/\D/g,'')" onkeypress="if(event.keyCode
57) event.returnValue =" type="text">
免费获取验证码
为了安全,请输入验证码,我们将优先处理您的需求!
请输入验证码
发送成功!
慧聪已收到您的需求,我们会尽快通知卖家联系您,同时会派出采购专员1对1为您提供服务,请您耐心等待!
联系人:卢扬杉&销售部
公司名称:珠海名科电子科技有限公司
请输入正确的手机号码
请输入验证码
*短信验证码:
免费获取验证码
为了安全,请输入验证码,我们将优先处理您的需求!
请输入验证码
每一份需求都会在24小时内得到行业多家优质供应商报价。
每一份需求的报价供应商工商信用资质都会经过专业人员检验,交易安全有保障。
免费咨询行业专家
免费咨询行业专家
服务主题:
筛选发货地
验证供应商真伪
提供其他优质供应商
采购数量:
用途描述:
成功加入采购单!
当前采购单共3种货品
成功加入采购单!
当前采购单共3种货品
不能购买自己发布的产品!
选中货品中含失效货品,无法完成下单,可能是:
1.货品库存不足
2.货品已过期,或被卖家删除
3.货品不支持在线交易
卖家暂时不在线,留下联系方式,卖家会主动联系您
*我要采购:
我的姓名:
留言内容:进程同步(二)---读者与写者问题
问题描述:允许多个读进程同时读一个共享对象,因为读操作不会使数据文件混乱。但不允许一个Writer进程和其他Reader进程或Writer进程同时访问共享对象。因为这种访问将会引起混乱。即一个writer进程必须与其他进程互斥的访问共享对象。
一、可用记录型信号量解决读者-写者问题
信号量的设置:为实现Reader和Writer进程间在读或写时的互斥而设置了一个互斥信号量Wmutex。另外,再设置一个整型变量readcount表示正在读的进程数目。readcount的引入:第一个读者进入阅览室的时候签到
同时告知写进程不能写。最后一个读进程离开阅览室的时候
签退同事告知写进程可以写了。为了标识第一个读进程和最后一个读进程,所以引入了写进程。
Var rmutex,wmutex:semaphore:=1,1;
readcount:integer:=0;
Reader: begin
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
wait(rmutex);
&&&&&&&&&&&&&&&&&&&
if readcount=0 then wait(wmutex);
&&&&&&&&&&&&&&&&&&&&&&
readcount:=readcount+1;
&&&&&&&&&&&&&&&&&&&
signal(rmutex);
&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&wait(rmutex);
&&&&&&&&&&&&&&&&&&&&
readcount:=readcount-1
&&&&&&&&&&&&&&&&&&&&
if readcount=0 then signal(wmutex);
&&&&&&&&&&&&&&&&&&&&
signal(rmutex);
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&
&&& writer:
&&&&&&&&&&&&&&
&&&&&&&&&&&&&&
wait(wmutex); per
&&&&&&&&&&&&&&&signal(wmutex);
&&&&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&&&&
&&&&&&&&end
分析其中蕴含的问题:
一、wmutex rmutex 各代表什么意思。
readcount是一个共享变量。(即多个reader进程可以访问的共享资源)因此为此设置rmutex。
wmutex是为了表示reader和witer进程在读或写的互斥而设置的信号量。
二、读者-写者问题分析
写进程到达:
1)无进程。关掉信号灯,所有的进程都无法进入。
2)有读者。自我阻塞。
3)有写者。自我阻塞。
读进程到达:
1)无进程。如果是第一位读者 则需关掉信号灯,不是第一位的话 更改读者数目,然后执行阅读操作。
2)有读者。互斥的修改读者数目,然后执行阅读操作。
3)有写者。自我阻塞。
写者进程离开,打开信号灯,其他所有进程都可以进入
读者进程离开,互斥地修改读者数目,若是最后一位离开的读者,应该打开写信号灯
三、利用信号量集机制解决读者—写者问题
与前面的读者-写者问题不同,增加了一个限制,即最多只允许RN个读者同时读。为此,又引入了一个信号量L,并赋予其初值为RN,通过执行wait(L,1,1)操作,来控制读者的数目,每当有一个读者进入时,就要先执行wait(L,1,1)操作,使L的值减1。当有RN个读者进入读后,L便减为0,第RN+1个读者要进入读时,必然会因wait(L,1,1)操作失败而阻塞。
L,mx: semaphore:=RN,1;
reader: begin
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&
Swait(L,1,1);
&&&&&&&&&&&&&&&&&&&&
Swait(mx,1,0);
&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&
Ssignal(L,1);
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
writer: begin
&&&&&&&&&&&
&&&&&&&&&&&
Swait(mx,1,1;L,RN,0);
&&&&&&&&&&&&&&
&&&&&&&&&&&&Ssignal(mx,1);
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&
分析其中蕴含的问题:
一、信号量集机制主要解决什么问题。
就是给reader进程的数量加个限制。记录型信号量机制的reader进程可以多到无穷多了。可实际中
计算机资源的数量有限,我们要给其设定个下限。
二、mx,Swait(mx,1,0); Swait(L,1,1);
Swait(mx,1,1;L,RN,0);各代表什么意思。
mx=1互斥的信号量,表示一个writer进程和其他的进程互斥。如果此时来的是writer进程,则mx-1=0
&&&&Sswait(0,1,0)&
此时所有reader进程都无法进入。Swait(mx,1,0)语句起着开关的作用。当mx&=1时
此时可以让任何reader进程进来。Swait(L,1,1);L 表示资源数量 1 表示下限 1 表示需求量。
当L=L+1进来的时候此时L=0&1 自我阻塞。
Swait(mx,1,1;L,RN,0);表示仅当既无写进程(mx=1)在读
并且也无读进程(L= RN)在读,才可以进入临界区。
三、熟记伪码。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。【NUCLEO-L496ZG评测】+ UCOSIII:任务内建信号量和消息队列 - ST开发工具 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 1280|回复: 1
【NUCLEO-L496ZG评测】+ UCOSIII:任务内建信号量和消息队列
在线时间1668 小时
ST金币12167
该用户从未签到主题帖子精华
& &和UCOSII相比UCOSIII做了很多改进和提升,特别是在内核性能方面,比如任务内建信号量和消息队列。UCOSIII任务内建信号量允许ISR或者任务直接发送信号量给其他的任务,这样避免了创建一个中间级的内核对象-信号量只用来标记一个单独的任务,同样UCOSIII任务内建的消息队列也可以从ISR或者任务直接发送消息给另外一个任务。
& &通过分析UCOSIII的任务级的时基处理代码可以很好的了解任务内建信号量和消息队列的用法。在初始化OS的时候会定一个事件任务,该任务的优先级默认为1(数字越低优先级越高)。通常情况下UCOSIII第一次调度会进入这个任务。
OSTaskCreate((OS_TCB& &&&*)&OSTickTaskTCB,
& && && && && &&&(CPU_CHAR& &*)((void *)&uC/OS-III Tick Task&),
& && && && && &&&(OS_TASK_PTR )OS_TickTask,
& && && && && &&&(void& && & *)0,
& && && && && &&&(OS_PRIO& &&&)OSCfg_TickTaskPrio,
& && && && && &&&(CPU_STK& & *)OSCfg_TickTaskStkBasePtr,
& && && && && &&&(CPU_STK_SIZE)OSCfg_TickTaskStkLimit,
& && && && && &&&(CPU_STK_SIZE)OSCfg_TickTaskStkSize,
& && && && && &&&(OS_MSG_QTY&&)0u,
& && && && && &&&(OS_TICK& &&&)0u,
& && && && && &&&(void& && & *)0,
& && && && && &&&(OS_OPT& && &)(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR | OS_OPT_TASK_NO_TLS),
& && && && && &&&(OS_ERR& &&&*)p_err);复制代码时基任务的代码如下:任务信号量pend的调用直接使用OSTaskSemPend()即可。和创建内核信号量的pend函数相比省略了第一个信号量定义的参数。在进入该函数之后如果没有请求到信号量就会被阻塞。
void&&OS_TickTask (void&&*p_arg)
{
& & OS_ERR&&
& & CPU_TS&&ts_
& & CPU_TS&&ts_delta_
& & CPU_TS&&ts_delta_
& & CPU_SR_ALLOC();
& & (void)&p_& && && && && && && && && && && && && && && &&&/* Prevent compiler warning& && && && && && && && && &&&*/
& & while (DEF_ON) {
& && &&&(void)OSTaskSemPend((OS_TICK&&)0,
& && && && && && && && && & (OS_OPT& &)OS_OPT_PEND_BLOCKING,
& && && && && && && && && & (CPU_TS&&*)0,
& && && && && && && && && & (OS_ERR&&*)&err);& && && && && && & /* Wait for signal from tick interrupt& && && && && && &*/
& && &&&if (err == OS_ERR_NONE) {
& && && && &OS_CRITICAL_ENTER();
& && && && &OSTickCtr++;& && && && && && && && && && && && && & /* Keep track of the number of ticks& && && && && && &&&*/
#if (defined(TRACE_CFG_EN) && (TRACE_CFG_EN & 0u))
& && && && &TRACE_OS_TICK_INCREMENT(OSTickCtr);& && && && && &&&/* Record the event.& && && && && && && && && && && && &*/
#endif
& && && && &OS_CRITICAL_EXIT();
& && && && &ts_delta_dly& &&&= OS_TickListUpdateDly();
& && && && &ts_delta_timeout = OS_TickListUpdateTimeout();
& && && && &ts_delta& && && &= ts_delta_dly + ts_delta_ /* Compute total execution time of list updates& && && &*/
& && && && &if (OSTickTaskTimeMax & ts_delta) {
& && && && && & OSTickTaskTimeMax = ts_
& && && && &}
& && &&&}
& & }
}复制代码在时基中断函数中OSTimeTick()进行了时基任务的信号量post,同时也进行了软件定时器任务型号的post,这个函数驱动了UCOSIII的调度和软件定时器。
void&&OSTimeTick (void)
{
& & OS_ERR&&
& & OSTimeTickHook();& && && && && && && && && && && && && &/* Call user definable hook& && && && && && && && && && & */
& &(void)OSTaskSemPost((OS_TCB *)&OSTickTaskTCB,& && && && &/* Signal tick task& && && && && && && && && && && && && &*/
& && && && && && && &&&(OS_OPT&&) OS_OPT_POST_NONE,
& && && && && && && &&&(OS_ERR *)&err);
#if OS_CFG_SCHED_ROUND_ROBIN_EN & 0u
& & OS_SchedRoundRobin(&OSRdyList[OSPrioCur]);
#endif
#if OS_CFG_TMR_EN & 0u
& & OSTmrUpdateCtr--;
& & if (OSTmrUpdateCtr == (OS_CTR)0u) {
& && &&&OSTmrUpdateCtr = OSTmrUpdateC
& && &&&OSTaskSemPost((OS_TCB *)&OSTmrTaskTCB,& && && && &&&/* Signal timer task& && && && && && && && && && && && &&&*/
& && && && && && && & (OS_OPT&&) OS_OPT_POST_NONE,
& && && && && && && & (OS_ERR *)&err);
& & }
#endif
}复制代码 1、任务内建信号量
我们将前面的创建的内核信号量的例子修改为使用任务的信号量来测试。
&&在任务中直接调用任务的信号量pend函数:
TIM截图09.png (28.22 KB, 下载次数: 0)
22:32 上传
在按键函数中post函数中:
TIM截图44.png (37.27 KB, 下载次数: 0)
22:32 上传
信号量的post和pend地方都和之前的一样只是调用的函数略有不同。
0.gif (29.87 KB, 下载次数: 0)
22:36 上传
2、任务内建消息队列
同样的将之前的消息队列的例子稍加修改即可使用任务内建消息队列进行传输。
消息队列的post和pend分别如下:
TIM截图52.png (36.95 KB, 下载次数: 0)
22:44 上传
TIM截图21.png (39.2 KB, 下载次数: 0)
22:44 上传
测试如下。消息队列超过12个也会提示内存不足。
1.gif (54.02 KB, 下载次数: 0)
22:44 上传
对于同步单个任务的信号量或者和单个任务进行通信的消息队列,使用任务内建的信号量和消息队列非常的简单方便。除此之外UCOSIII比UCOSII还有很多的提示,通过研究UCOSIII的源代码我们可以更加详细的了解这种不同进而更加的熟练的掌握这个OS。
测试代码:
(1.49 MB, 下载次数: 24)
22:50 上传
点击文件名下载附件
下载积分: ST金币 -1
(1.49 MB, 下载次数: 17)
22:50 上传
点击文件名下载附件
下载积分: ST金币 -1
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间299 小时
ST金币1237
该用户从未签到主题帖子精华
金牌会员, 积分 4183, 距离下一级还需 817 积分
很好的帖子,先标记下,顶起来。
STM32粉丝勋章Ⅳ
狂欢节专属(智多星)
STM32粉丝勋章Ⅲ
狂欢节专属(分享宝宝)
STM32粉丝勋章Ⅰ
狂欢节专属(微信上墙)
STM32粉丝勋章Ⅱ
狂欢节专属(研讨会问答)
站长推荐 /1
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered by}

我要回帖

更多关于 楼宇对讲系统 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信