Skip to content

Commit

Permalink
补充优先级反转
Browse files Browse the repository at this point in the history
  • Loading branch information
summerainnn committed May 26, 2021
1 parent fd278ce commit 604f345
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions Operating Systems.md
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ void test_forks(int i) {
<details>
<summary>展开</summary>
高优先级的进程等待被一个低优先级进程占用的资源时,就会出现优先级反转,即优先级较低的进程比优先级较高的进程先执行。
高优先级的进程等待被一个低优先级进程占用的资源时,就会出现优先级反转,即优先级较低的进程比优先级较高的进程先执行。此处详细解释优先级反转带来的问题:如果有一个中等优先级的进程将低优先级的进程抢占,那么此时低优先级的进程无法正常进行并在后续释放被占用的资源,导致高优先级的任务一直被挂起,直到中等优先级的进程完成后,低优先级的进程才可以继续并在后续释放占用的资源,最后高优先级的进程才可以执行。导致的问题就是高优先级的进程在中等优先级的进程调度之后。
解决方法:
- 优先级天花板(priority ceiling):当任务申请某资源时,把该任务的优先级提升到可访问这个资源的所有任务中的最高优先级,这个优先级称为该资源的优先级天花板。简单易行。
Expand Down Expand Up @@ -557,7 +557,7 @@ C 语言使用运行时栈来存储过程信息。每个函数的信息存储在
<details>
<summary>缓冲区溢出的防范方式</summary>
防范缓冲区溢出攻击的机制有三种:随机化、栈保护和限制可执行代码区域。
- 随机化:包括栈随机化(程序开始时在栈上分配一段随机大小的空间)和地址空间布局随机化(Address-Space Layout Randomization,ASLR,即每次运行时程序的不同部分,包括代码段、数据段、栈、堆等都会被加载到内存空间的不同区域),但只能增加攻击一个系统的难度,不能完全保证安全。
- 栈保护:在每个函数的栈帧的局部变量和栈状态之间存储一个**随机产生的**特殊的值,称为金丝雀值(canary)。在恢复寄存器状态和函数返回之前,程序检测这个金丝雀值是否被改变了,如果是,那么程序异常终止。
Expand Down

0 comments on commit 604f345

Please sign in to comment.