操作系统原理

一、中断服务程序

中断服务程序主要用来处理来自硬件的中断,毋庸置疑,它是嵌入式程序的重要组成部分。而关于中断服务程序的一些注意事项,虽然已经是老生常谈的问题,但本人还是想简单为自己总结一下,也希望给大家一些参考。

首先,中断服务程序中哪些不可以做。
1. 不能使用printf,可用logMsg代替。
2. 不能使用free,malloc也就意味着也不能是用C++的new,delete操作符
3. 不能调用任何阻塞的处理,比如semTake,taskDelay等
4. 不能进行请求处理任务上下文的操作,不能使用0作为任务id,比如调用taskSuspend(0)
5. 不能使用互斥信号量,因为其中使用了taskSafe和taskUnsafe
6. 不能使用系统的IO调用,包括写操作
7. 尽量不进行浮点运算处理,如果要进行浮点运算,必须显式的保存或回复FP寄存器(fppArchLib)。

那么,中断服务程序中哪些可以或者应该去做呢。
1. 对二值或者计数信号量,可以调用semGive或semFlush
2. 可以对内存进行读或写操作,包括对映射内存的访问
3. 可以对非阻塞操作的管道或者消息队列进行写操作
4. 可以使用taskSuspend,taskResume等
5. 处理尽量短小,最理想的处理是只包含semGive处理,把其他处理放在中断服务任务中处理

虽然每条都很显而易见,但有时还是容易会忽略个别,所以还是罗列了下,可以作为checklist帮助检查。
————————————————
版权声明:本文为CSDN博主「MU_SZ」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/my_business/article/details/9291877

2、中断服务程序,不能用的函数:prinf malloc semTake(信号量获取) usleep

3、信号的回调不能返回:SIGSEGV SIGINT SIGBUS。   (SIGPIPE SIGFPE 不是)

二、

互斥

互相排斥(mutex exclusion)技术,简称为互斥(mutex),它用于防止多个线程同时访问共享资源。互斥技术采用一个对象控制独占访问权限,该对象称之为互斥。配合条件变量(condition variable),互斥可以实现广泛的同步访问控制。例如,它们允许程序员为数据访问操作指定执行次序。

在 C 程序中,一个互斥采用类型为 mtx_t 的对象表示,它能在一段时间内被一个线程锁定,而其他线程必须等待,直到它被解锁。在头文件 threads.h 中,包括了关于互斥操作的所有声明。最重要的互斥函数有:

C语言线程互斥和原子操作

三、多线程

哪些库函数,在多线程调用时可能会导致数据竞争。

四、volatile变量使用场景:中断服务程2序中修1改供其他程 1序检测的变量; 多任务环1境个任1务间共1享的标1志;存储器映射的硬件寄存器变量;(频1繁调1用的子1函数内部)

五、linux用户态间进程切换,需要更新MMU page table映射寄存器

六、多线程调用可能会导致数据竞争:strtok  strerror asctime streeor_r rand

微处理器常见指令架构:

CISC负责  RISC精简指令 EPIC显示并行 VLIW超长指令字

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值