(操作系统实验)第四次说明
數(shù)字說明,解決餓死的方法
allnum 和readnum代表的含義是一樣的,都是最多可以讀取的數(shù)量
2 3 3 3 4
-
A
-
如果誰都不休息的話,此時(shí) **A B C **會一直連續(xù)不斷的讀,發(fā)生饑餓
-
當(dāng)A結(jié)束的時(shí)候
-
1 12
-
-
一個(gè)一個(gè)讀的時(shí)候,當(dāng)A結(jié)束,此時(shí)當(dāng)B讀取第一個(gè)的時(shí)候,2+3+3+4=12
-
兩個(gè)一起讀的時(shí)候,當(dāng)A結(jié)束,B,C一起讀的時(shí)候,2+3+4=9
-
當(dāng)三個(gè)一起讀的時(shí)候,當(dāng)A結(jié)束,B,C一起讀的時(shí)候,3+4=7
-
B
- 當(dāng)B結(jié)束的時(shí)候
- 1
- 一個(gè)一個(gè)的讀的時(shí)候,當(dāng)C讀取第一個(gè)的時(shí)候,2+3+4=9
- 兩個(gè)一起讀的時(shí)候,當(dāng)C讀取讀取第二個(gè)的時(shí)候 1+3 +4=8
- 三個(gè)一起讀的時(shí)候,當(dāng)D開始寫的時(shí)候,2+4=6
-
C
-
當(dāng)C結(jié)束的時(shí)候
-
1
-
一個(gè)一個(gè)的讀的時(shí)候,當(dāng)C結(jié)束,此時(shí)為3+4-1=6
-
兩個(gè)兩個(gè)讀的時(shí)候,C結(jié)束,此時(shí)為6
-
三個(gè)一起讀的時(shí)候,此時(shí)為6
-
-
global.c文件
- 修改了 task_table,將自己寫的進(jìn)程和標(biāo)識寫進(jìn)了task_table
- 刪除了一些自己用不到的東西
main.c
-
修改了kernel_main()方法
- 將自己所寫的進(jìn)程進(jìn)行初始化,8個(gè)進(jìn)程進(jìn)行pao_table的ticks和priority的初始化
- 加入了自己的關(guān)于進(jìn)程初始化的東西,包括正在讀寫數(shù)量,以及讀寫的標(biāo)識,還有允許一起讀的數(shù)量
-
刪除了testA
-
刪除了testB
-
刪除了testC
-
增加了testZ
- 進(jìn)行我們PV操作的初始化,并且運(yùn)行我們的程序
-
增加了A進(jìn)程
-
增加了B進(jìn)程
-
增加了C進(jìn)程
-
增加了D進(jìn)程
-
增加了E進(jìn)程
- A-E進(jìn)程進(jìn)行了自己的讀寫進(jìn)程的調(diào)用和執(zhí)行
-
增加了F進(jìn)程
-
作用:每隔一個(gè)時(shí)間片(5000)進(jìn)行當(dāng)前進(jìn)程打印
-
如果是讀者
- 通過數(shù)字來查看,一共是有多少個(gè)人現(xiàn)在正在讀
-
如果是寫者,就直接打印正在寫
-
沒有其他的狀態(tài)
-
proc.c
-
修改了schedule函數(shù)
-
增加了系統(tǒng)調(diào)用sys_MyPrint()
-
增加了系統(tǒng)調(diào)用sysy_MySleep()
-
增加了系統(tǒng)調(diào)用P
-
增加了系統(tǒng)調(diào)用V
-
增加了信號量的初始化函數(shù)
-
增加了打印進(jìn)程狀態(tài)函數(shù)
- printA
- printB
- printC
- printD
- printE
-
增加了讓進(jìn)程睡眠的函數(shù)(為了避免餓死)
- sleepAToNoDeadClock
- sleepBToNoDeadClock
- sleepCToNoDeadClock
- sleepDToNoDeadClock
- sleepEToNoDeadClock
-
增加了讀寫的函數(shù)
- READA
- READB
- READC
- WRITED
- WRITEE
syscall.asm
- 增加了導(dǎo)出符號 P V Sleep print
- 增加了sleep,P,V,print的C函數(shù)調(diào)用
讀者優(yōu)先和上述類似
總結(jié)
以上是生活随笔為你收集整理的(操作系统实验)第四次说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (web前端笔记)2020-12-23(
- 下一篇: (商务智能第七章)