第三章處理機調(diào)度與常見算法+死鎖 銀行家算法合集

處理機調(diào)度與死鎖

處理機調(diào)度:多道程序環(huán)境下横腿,動態(tài)的把處理機分配給就緒隊列中的一個進程使之
執(zhí)行开缎。提高處理機的利用率、改善系統(tǒng)性能仗岸,很大程度上取決于處理機調(diào)度的性能允耿。
處理機調(diào)度便成為OS設計的中心問題之一。分配的任務由處理機調(diào)度程序完成

處理機調(diào)度的基本概念

作業(yè)進入系統(tǒng)駐留在外存的后備隊列上扒怖,再至調(diào)入內(nèi)存運行完畢较锡,可能要經(jīng)歷下述三級調(diào)度

高級調(diào)度

又稱作業(yè)調(diào)度或長程調(diào)度(Long-Term Scheduling),接納調(diào)度(Admission Scheduling) 主要在早期批處理階段,處理在外存上的作業(yè)
決定外存后備隊列中的哪些作業(yè)調(diào)入內(nèi)存; ?為它們創(chuàng)建進程盗痒、分配必要的資源; ?將新創(chuàng)建的進程排在就緒隊列上蚂蕴,準備執(zhí)行。 * 管理的方面比較多

系統(tǒng)運行并不一定存在高級調(diào)度

批處理系統(tǒng) :作業(yè)進入系統(tǒng)后先駐留外存俯邓, 故需要有作業(yè)調(diào)度骡楼。
分時系統(tǒng) :為及時響應,作業(yè)由終端直接送 入內(nèi)存稽鞭,故不需作業(yè)調(diào)度鸟整。
實時系統(tǒng) 中,通常也不需作業(yè)調(diào)度朦蕴。

低級調(diào)度

也稱為進程調(diào)度篮条、微觀調(diào)度或短程調(diào)度 (Short-Term Scheduling) 決定內(nèi)存就緒隊列中的哪個進程獲得處理 機,進行分配工作吩抓。是最基本的一種調(diào)度涉茧, 在三種基本OS中都有

進程調(diào)度方式

非搶占方式(Non-preemptive Mode) 一旦處理機分配給某進程,該進程一直執(zhí)行疹娶。 決不允許其他進程搶占已分配運行進程的處理機降瞳。 2)搶占方式(Preemptive Mode) 允許調(diào)度程序根據(jù)某種原則,暫停某個正在執(zhí) 行的進程,將處理機重新分配給另一進程挣饥。

中級調(diào)度

又稱交換調(diào)度或中程調(diào)度(Medium-Term Scheduling) 引入目的:提高內(nèi)存利用率和系統(tǒng)吞吐量除师。 根據(jù)條件將一些進程調(diào)出或再調(diào)入內(nèi)存

調(diào)度隊列模型

不論高級、中級或者低級調(diào)度扔枫,都涉及到進程隊 列汛聚,由此形成了三類調(diào)度隊列模型。從這三種方式中 體驗調(diào)度的過程短荐。
① 僅有進程調(diào)度的調(diào)度隊列模型
② 具有高級和低級調(diào)度的調(diào)度隊列模型
③ 同時具有三級調(diào)度的調(diào)度隊列模型

進程調(diào)度發(fā)生時間

正在執(zhí)行的進程結(jié)束 ?
正在執(zhí)行的進程阻塞 ?
正在執(zhí)行的進程未完成轉(zhuǎn)就緒(時間片到) ?
新就緒了更高優(yōu)先級的進程(搶占式)
具有高級和低級調(diào)度的調(diào)度隊列模型 ? 批處理系統(tǒng)中倚舀,還需要作業(yè)調(diào)度

同時具有三級調(diào)度的調(diào)度隊列模型

引入中級調(diào)度后,進程的狀態(tài)變化:
? 就緒狀態(tài):分為內(nèi)存就緒和外存就緒忍宋。
? 阻塞狀態(tài):分為內(nèi)存阻塞和外存阻塞痕貌。 中級調(diào)度使進程在上述狀態(tài)間變化,并使 數(shù)據(jù)在內(nèi)外存間互換糠排。

image.png

選擇調(diào)度方式和調(diào)度算法的若干準則

面向用戶的準則

周轉(zhuǎn)時間短: 針對批處理系統(tǒng)的性能指標舵稠。作業(yè)從提交到完成所經(jīng)歷 的時間。 ?
CPU執(zhí)行用時Ts ?
總的等待時間Tw = 在后備隊列中等待 + 就緒隊列上等待 + 阻塞隊列中等待(等待I/O操作用時) ?
周轉(zhuǎn)時間T=Ts+Tw ?
帶權周轉(zhuǎn)時間W= T/Ts ?
平均周轉(zhuǎn)時間入宦、平均帶權周轉(zhuǎn)時間(n個作業(yè)求平均)

響應時間快:針對分時系統(tǒng)哺徊。用戶輸入一個請 求(如擊鍵)到系統(tǒng)給出首次響應(如屏幕顯示) 的時間
?均衡性:系統(tǒng)響應時間的快慢與用戶所請求的 復雜性相適應。
?截止時間的保證:針對實時系統(tǒng)的性能指標乾闰。 開始截止時間和完成截止時間落追。任務必須按規(guī)定 的時間開始或完成,調(diào)度方式和算法必須能保證 該要求涯肩。 
?優(yōu)先權準則:三大基本OS在調(diào)度算法的選擇 時都可遵循轿钠。可以使關鍵任務達到更好的指標

面向系統(tǒng)的準則

系統(tǒng)吞吐量高: 批處理系統(tǒng)的重要指標病苗。 ?單位時間內(nèi)所完成的作業(yè)數(shù)谣膳,跟作業(yè)本身 (與作業(yè)平均長度密切相關)和調(diào)度算法 都有關系; 

處理機調(diào)度與死鎖

調(diào)度算法

先來先服務調(diào)度算法FCFS

一種最簡單的調(diào)度算法铅乡,按先后順序進行調(diào)度继谚。既 可用于作業(yè)調(diào)度,也可用于進程調(diào)度阵幸。
 ? 按照作業(yè)提交花履,或進程變?yōu)榫途w狀態(tài)的先后次 序分派CPU; 
? 新作業(yè)只有當當前作業(yè)或進程執(zhí)行完或阻塞才 獲得CPU運行
 ? 被喚醒的作業(yè)或進程不立即恢復執(zhí)行挚赊,通常等 到當前作業(yè)或進程出讓CPU诡壁。 (所以,默認即 是非搶占方式)
 不利于短作業(yè)(進程) 

短作業(yè)(進程)優(yōu)先調(diào)度算法SJF/SPF

優(yōu)點:
 ? 通過上表可見采用SJF/SPF算法荠割,平均周轉(zhuǎn) 時間妹卿、平均帶權周轉(zhuǎn)時間都有明顯改善旺矾。 SJF/SPF調(diào)度算法能有效的降低作業(yè)的平均 等待時間,提高系統(tǒng)吞吐量夺克。 方式: 
? 分搶占和非搶占兩種方式箕宙,上例為簡單的非 搶占式。
 SJF/SPF的不足: 1. 對短作業(yè)有利铺纽,但同時造成了對長作 業(yè)的不利柬帕。 2.由于作業(yè)(進程)的長短含主觀因素, 不一定能真正做到短作業(yè)優(yōu)先狡门。 3.未考慮作業(yè)的緊迫程度陷寝,因而不能保證 緊迫性作業(yè)(進程)的及時處理。

高優(yōu)先權優(yōu)先調(diào)度算法HPF

照顧緊迫性作業(yè)其馏,使其獲得優(yōu)先處理而引入 調(diào)度算法凤跑。常用于批處理系統(tǒng)中的作業(yè)調(diào)度算法, 以及多種操作系統(tǒng)中的進程調(diào)度算法 1) 分兩種方式:
 ?非搶占式優(yōu)先權算法 
?搶占式優(yōu)先權算法 關鍵點:新作業(yè)產(chǎn)生時
優(yōu)先權的類型
 ? 靜態(tài)優(yōu)先權:創(chuàng)建進程時確定叛复,整個運行 期間保持不變仔引。一般利用某一范圍的一個 整數(shù)來表示,又稱為優(yōu)先數(shù)致扯。
 ? 動態(tài)優(yōu)先權:創(chuàng)建進程時賦予的優(yōu)先權可 隨進程的推進或隨其等待時間的增加而改 變肤寝。

高響應比優(yōu)先調(diào)度算法HRRN

 短作業(yè)優(yōu)先算法是一種比較好的算法(相當于根據(jù) 作業(yè)長度設定的靜態(tài)優(yōu)先權算法)当辐,適用于短作業(yè) 較多的批處理系統(tǒng)中抖僵,其主要不足是長作業(yè)的運行 得不到保證。
 ? HRRN為每個作業(yè)引入動態(tài)優(yōu)先權缘揪,使作業(yè)的優(yōu) 先級隨著等待時間的增加而以速率a提高: 優(yōu)先權 =(等待時間+要求服務時間)/要求服務時間 = 響應時間 / 要求服務時間

基于時間片的輪轉(zhuǎn)調(diào)度算法RR

? 分時系統(tǒng)新需求:及時響應用戶的請求耍群; 采用基于 時間片 的輪轉(zhuǎn)式進程調(diào)度算法。
 ? 早期分時系統(tǒng)采用的是 簡單的時間片輪轉(zhuǎn)法
找筝, 進入90年代后廣泛采用 多級反饋隊列調(diào)度算 法 蹈垢。 
時間片輪轉(zhuǎn)算法
1. 將系統(tǒng)中所有的就緒進程按照FCFS原則,排成一 個隊列袖裕。 2. 每次調(diào)度時將CPU分派給隊首進程曹抬,讓其執(zhí)行一 個時間片。時間片的長度從幾個ms到幾百ms急鳄。 3. 在一個時間片結(jié)束時谤民,發(fā)生時鐘中斷。 4. 調(diào)度程序據(jù)此暫停當前進程的執(zhí)行疾宏,將其送到就 緒隊列的末尾张足,并通過上下文切換執(zhí)行當前就緒 的隊首進程。 

多級反饋隊列算法FB

1)設置多個就緒隊列坎藐,各隊列有不同的優(yōu)先 級,優(yōu)先級從第一個隊列依次降低为牍。
 2) 賦予各隊列進程執(zhí)行時間片大小不同, 優(yōu) 先權越高,時間片越短 。
image.png

實時調(diào)度

實時系統(tǒng)

1.指系統(tǒng)能夠在限定的響應時間內(nèi)提供所需水平 的服務碉咆。
2.指計算的正確性不僅取決于程序的邏輯正確性抖韩, 也取決于結(jié)果產(chǎn)生的時間,如果系統(tǒng)的時間約 束條件得不到滿足吟逝,將會發(fā)生系統(tǒng)出錯帽蝶。
實時任務:具有明確時間約束的計算任務, 有軟/硬块攒,隨機/周期性之分励稳。

實現(xiàn)實時調(diào)度的基本條件

1)提供必要的信息 為了實現(xiàn)實時調(diào)度,系統(tǒng)應向調(diào)度程序提供 有關任務的下述信息:
就緒時間 囱井。該任務成為就緒狀態(tài)的時間驹尼。
開始截止時間、完成截止時間 庞呕。
處理時間 新翎。從開始執(zhí)行到完成所需時間。
資源要求 住练。任務執(zhí)行時所需的一組資源地啰。
優(yōu)先級 。根據(jù)任務性質(zhì)賦予不同優(yōu)先級讲逛。
2)系統(tǒng)處理能力足夠強
處理能力不足可能會出現(xiàn)某些實時任務不能 得到及時處理亏吝,導致難以預料的后果。 如: 系統(tǒng)中有M個周期性的硬實時任務盏混,處理 時間為Ci蔚鸥,周期時間表示為Pi, 單機系統(tǒng)中必須滿足條件
3)采用搶占式調(diào)度機制
? 硬實時任務:廣泛采用搶占機制。
? 小的實時系統(tǒng):如能預知任務的開始 截止時間许赃,為簡化調(diào)度程序和對任務調(diào) 度時所花費的系統(tǒng)開銷止喷,可采用非搶占 調(diào)度機制,
4)具有快速切換機制
1. 對外部中斷的快速響應能力混聊。 ? 利用快速硬件中斷機構弹谁,可在緊迫的 外部事件請求中及時響應。 2. 快速的任務分派能力句喜。 ? 使系統(tǒng)中的運行功能單位適當?shù)男≡し撸岣咔?換速度。類如線程的思想

實時調(diào)度算法的分類

非搶占調(diào)度算法

該算法較簡單藤滥,用于一些小型實時系統(tǒng)或要 求不太嚴格的實時系統(tǒng)中鳖粟,又可分為:
 1. 非搶占式輪轉(zhuǎn)調(diào)度算法。常用于工業(yè)生產(chǎn) 的群控系統(tǒng)中拙绊,要求不太嚴格向图。
 2. 非搶占式優(yōu)先調(diào)度算法泳秀。要求相對嚴格, 根據(jù)任務的優(yōu)先級安排等待位置榄攀∈雀担可用于 有一定要求的實時控制系統(tǒng)中。(精心設 置可獲得百ms級的響應時間)

搶占式調(diào)度算法

較嚴格的實時系統(tǒng)中(t約為數(shù)十ms)檩赢, 選擇采用搶占式優(yōu)先權調(diào)度算法吕嘀。根據(jù) 搶占發(fā)生時間可分為:
 1. 基于時鐘:某高優(yōu)先級任務到達后并不 立即搶占,而等下一個時鐘中斷時搶占贞瞒。 
2. 立即搶占:一旦出現(xiàn)外部中斷偶房,只要當 前任務未處于臨界區(qū),就立即搶占處理 機军浆。

最早截止時間優(yōu)先EDF

根據(jù)任務的開始截止時間來確定任務的優(yōu)先級棕洋。 截止時間越早,其優(yōu)先級越高乒融。 ?系統(tǒng)保持一個實時任務就緒隊列 ?隊列按各任務截止時間的早晚排序 ?調(diào)度程序總是選擇就緒隊列中的第一個任務掰盘,分配處 理機使之投入運行。
 ? 新任務產(chǎn)生時赞季,是否等當前程序執(zhí)行完: ?搶占式/非搶占式 
? 可能會使作業(yè)錯過愧捕,但可適用于軟實時系統(tǒng)

最低松弛度優(yōu)先LLF

根據(jù)任務緊急(或松弛)的程度,來確定任務的優(yōu)先 級申钩。任務的緊急程度越高(松弛度值越写位妗),優(yōu)先級就越 高典蜕。
 ? 松弛度= 截止完成時間 – 還需執(zhí)行時間 - 當前時間 可理解為當前時刻到開始截止時刻間的差距断盛,隨著時間的 推進罗洗,這個差值逐漸變小愉舔,任務越來越緊迫

處理機調(diào)度與死鎖

死鎖

多道程序系統(tǒng)借助并發(fā)執(zhí)行改善資源利用率, 提高系統(tǒng)吞吐量伙菜,但可能發(fā)生一種危險——死 鎖轩缤。 死鎖(Deadlock):指多個進程在運行過 程中,因爭奪資源而造成的一種僵局贩绕。當進程 處于這種狀態(tài)時火的,若無外力作用,它們都將無 法再向前推進淑倾。

產(chǎn)生死鎖的原因

  1. 競爭資源馏鹤。系統(tǒng)中供多個進程共享的資源 如打印機、公用隊列等的數(shù)目不滿足需要 時娇哆,會引起資源競爭而產(chǎn)生死鎖湃累。
  2. 進程間推進順序非法勃救。進程在運行過程中, 請求和釋放資源的順序不當治力,同樣會導致 死鎖蒙秒。

產(chǎn)生死鎖的必要條件

① 互斥條件:進程對所分配到的資源進行排他性 使用
② 請求和保持條件:進程已經(jīng)保持了至少一個資 源,又提出新的資源請求宵统,而新請求資源被其 他進程占有只能造成自身進程阻塞晕讲,但對自己 已獲得的其他資源保持不放,必然影響其他進 程马澈。
③ 不剝奪條件:進程已獲得的資源未使用完之前 不能被剝奪瓢省,只能在使用完時由自己釋放。
④ 環(huán)路等待條件

處理死鎖的基本方法

① 預防死鎖 
? 設置限制條件痊班,破壞四個必要條件的一個或幾個净捅, 預防發(fā)生死鎖。
 ? 較易實現(xiàn)辩块。限制條件的嚴格也會導致系統(tǒng)資源利用 率和系統(tǒng)吞吐量降低蛔六。
 ② 避免死鎖 
? 不須事先限制,破壞四個必要條件废亭,而是在資源的 動態(tài)分配過程中国章,用某種方法去防止系統(tǒng)進入不安 全狀態(tài),從而避免發(fā)生死鎖豆村。
 ? 這種事先加以較弱限制的方法液兽,實現(xiàn)上有一定難度, 但可獲較高的資源利用率及系統(tǒng)吞吐量掌动,目前在較 完善的系統(tǒng)中四啰,常用此方法來避免發(fā)生死鎖。
③ 檢測死鎖粗恢。
 ? 允許系統(tǒng)運行過程中發(fā)生死鎖柑晒,但通過系統(tǒng)檢測機 構可及時的檢測出,能精確確定與死鎖有關的進程 和資源眷射;然后采取適當?shù)拇胧┏自蓿瑥南到y(tǒng)中將已發(fā) 生的死鎖清除掉。
 ④ 解除死鎖妖碉。 
? 與死鎖檢測配套的一種措施涌庭。
 ? 常用的實施方法:撤銷或掛起一些進程,以便回收 一些資源并將他們分配給已阻塞進程欧宜,使之轉(zhuǎn)為就 緒以繼續(xù)運行坐榆。 
? 死鎖的檢測與解除措施,有可能使系統(tǒng)獲得較好的 資源利用率和吞吐量(死鎖幾率不一定很高)冗茸,但 在實現(xiàn)上難度也最大席镀。

預防死鎖的方法

預防死鎖
摒棄“環(huán)路等待”條件
避免死鎖

銀行家算法避免死鎖

image.png

image.png

image.png
(1)T0時刻的初始狀態(tài)是安全的羹铅; 
(2)下面出現(xiàn)P1請求資源的操作,具體請求 向量為Request1(1,0,2)愉昆,利用銀行家算法 進行檢查該操作是否是安全可行的: 
1)兩個基本判斷 
Request1(1,0,2)<=Need1(1,2,2) 
Request1(1,0,2)<=Available1(3,3,2) 
2)先假設為P1分配資源职员,并修改 Available,Allocation1和Need1向量。
3) Request1(1,0,2)后新的資源狀態(tài)表下再判斷新資源狀態(tài)是否是 安全的跛溉。 找到一個安全序列{P1,P3,P4,P0,P2}焊切,因此系統(tǒng)是安全的,該請求是 安全的芳室,可將假設真正實施专肪,將P1所申請的資源分配給它。

死鎖的檢測與解除

當系統(tǒng)為進程分配資源時堪侯,若未采取任何 限制性措施嚎尤,則系統(tǒng)必須提供檢測和解除 死鎖的手段,為此系統(tǒng)必須:

  1. 保存有關資源的請求和分配信息伍宦;
  2. 提供一種算法芽死,以利用這些信息來檢測系 統(tǒng)是否已進入死鎖狀態(tài)


    image.png

死鎖的檢測

檢測時機:
當進程等待時檢測死鎖
定時檢測
系統(tǒng)資源利用率下降時檢測死鎖

死鎖定理

簡化方法如下:
1.在資源分配圖中找出一個既不阻塞又非獨立 的進程結(jié)點Pi,在順利的情況下運行完畢次洼,釋 放其占有的全部資源关贵。
2.由于釋放了資源,這樣能使其它被阻塞的進 程獲得資源繼續(xù)運行卖毁。消去了Pi的邊揖曾。
3.經(jīng)過一系列簡化后,若能消去圖中所有邊亥啦, 使結(jié)點都孤立炭剪,稱該圖是可完全簡化的。

死鎖的解除

當發(fā)現(xiàn)進程死鎖時翔脱,便應立即把它們從 死鎖狀態(tài)中解脫出來奴拦。常采用的方法是:

  1. 剝奪資源。從其他進程剝奪足夠數(shù)量的 資源給死鎖進程以解除死鎖狀態(tài)碍侦。
  2. 撤銷進程粱坤。最簡單的是讓全部進程都死 掉隶糕;溫和一點的是按照某種順序逐個撤 銷進程瓷产,直至有足夠的資源可用,使死 鎖狀態(tài)消除為止枚驻。
2.jpg

3.jpg

](https://upload-images.jianshu.io/upload_images/5951897-83c04776da3eae4c.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
1.jpg

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末濒旦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子再登,更是在濱河造成了極大的恐慌尔邓,老刑警劉巖晾剖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異梯嗽,居然都是意外死亡齿尽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門灯节,熙熙樓的掌柜王于貴愁眉苦臉地迎上來循头,“玉大人,你說我怎么就攤上這事炎疆】睿” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵形入,是天一觀的道長全跨。 經(jīng)常有香客問我,道長亿遂,這世上最難降的妖魔是什么浓若? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮蛇数,結(jié)果婚禮上七嫌,老公的妹妹穿的比我還像新娘。我一直安慰自己苞慢,他們只是感情好诵原,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著挽放,像睡著了一般绍赛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辑畦,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天吗蚌,我揣著相機與錄音,去河邊找鬼纯出。 笑死蚯妇,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的暂筝。 我是一名探鬼主播箩言,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼焕襟!你這毒婦竟也來了陨收?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎务漩,沒想到半個月后拄衰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡饵骨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年翘悉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片居触。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡镐确,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出饼煞,到底是詐尸還是另有隱情源葫,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布砖瞧,位于F島的核電站息堂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏块促。R本人自食惡果不足惜荣堰,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望竭翠。 院中可真熱鬧振坚,春花似錦、人聲如沸斋扰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽传货。三九已至屎鳍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間问裕,已是汗流浹背逮壁。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留粮宛,地道東北人窥淆。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像巍杈,于是被迫代替她去往敵國和親忧饭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355