




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、整理課件第五講第五講 UNIXUNIX進程調用進程調用和進程存儲和進程存儲 整理課件概述概述 UNIX UNIX系統是分時多任務、多道程序環境系統。它采用時間片輪轉系統是分時多任務、多道程序環境系統。它采用時間片輪轉轉方式為系統中的多個用戶的多道程序提供服務。為了跟蹤計算機并轉方式為系統中的多個用戶的多道程序提供服務。為了跟蹤計算機并行活動的狀態及并發程序對資源的共享使用,提出了進程的概念。行活動的狀態及并發程序對資源的共享使用,提出了進程的概念。整理課件提綱提綱1 1 進程基本概念進程基本概念2 UNIX2 UNIX系統中的進程系統中的進程3 UNIX3 UNIX系統進程調度和管理系統進程調
2、度和管理4 4 進程存儲管理與存儲技術進程存儲管理與存儲技術5 UNIX5 UNIX進程的存儲管理進程的存儲管理6 UNIX6 UNIX進程控制進程控制整理課件1 1 進程的基本概念進程的基本概念1進程與程序進程與程序(a)程序:程序代碼,靜態)程序:程序代碼,靜態 進程:可以看作某種特定任務的程序在一個數據集合上的一進程:可以看作某種特定任務的程序在一個數據集合上的一次具體的活動,動態。次具體的活動,動態。(b)進程與程序相比具有動態性、獨立性、并發性等特點。)進程與程序相比具有動態性、獨立性、并發性等特點。整理課件1 1 進程的基本概念進程的基本概念2進程的描述進程的描述 進程的結構進程描
3、述信息進程的結構進程描述信息 進程實體進程實體PCB 程序段數據結構集程序段數據結構集PCB:包括進程的描述信息、控制信息及進程使用資源信息、包括進程的描述信息、控制信息及進程使用資源信息、處理器現場保護結構等,其中內容是進程動態特征的集中反處理器現場保護結構等,其中內容是進程動態特征的集中反映。映。OS通過通過PCB感知一個進程的存在。感知一個進程的存在。程序段:程序段:進程需要完成功能的程序代碼。進程需要完成功能的程序代碼。數據結構集數據結構集:進程的程序執行時要完成功能的程序代碼。:進程的程序執行時要完成功能的程序代碼。整理課件1 1 進程的基本概念進程的基本概念3進程的狀態進程的狀態
4、程序程序 靜態靜態 進程進程 動態,具有生命周期動態,具有生命周期 非運行 運行 調度 進入 退出 暫停 兩狀態進程模式:兩狀態進程模式:兩狀態進程模式中包含的進程狀態轉換過程:兩狀態進程模式中包含的進程狀態轉換過程:進程開始;調度運行;暫停運行;進程結束進程開始;調度運行;暫停運行;進程結束整理課件1 1 進程的基本概念進程的基本概念五狀態進程模式:五狀態進程模式: 創建創建阻塞阻塞就緒就緒運行運行退出退出事件等待超時調度事件發生提交新建釋放五狀態進程模式中包含的進程狀態轉換過程:五狀態進程模式中包含的進程狀態轉換過程: 創建新進程;進程提交;調度運行;釋放;超時;創建新進程;進程提交;調度
5、運行;釋放;超時;事件等待;事件發生事件等待;事件發生整理課件1 1 進程的基本概念進程的基本概念4進程控制進程控制 主要實現進程狀態的轉換和并發進程的管理主要實現進程狀態的轉換和并發進程的管理 1)原語原語 不可分解,不間斷,不可并發執行的程序段不可分解,不間斷,不可并發執行的程序段2)臨界區臨界區 指共享某個資源時,不允許多個并發的程序交叉執行的一段代指共享某個資源時,不允許多個并發的程序交叉執行的一段代碼。并發產生的原因:隨機發生,碼。并發產生的原因:隨機發生, 程序需要互不干涉。程序需要互不干涉。 3)進程互斥進程互斥 4)信號量信號量 描述共享資源使用情況的數據結構描述共享資源使用情
6、況的數據結構 5)進程同步進程同步 有兩種方式:有兩種方式:互斥互斥: 我在,你不能在我在,你不能在 間接制約關系間接制約關系 同步同步: 你不來,我不能走你不來,我不能走 直接制約關系直接制約關系整理課件2 UNIX2 UNIX中的進程中的進程1 UNIX創建進程的過程創建進程的過程 引引 導導 程程 序序 核核 心心 程程 序序 創創 建建 : 0 號號 進進 程程 0 號號 進進 程程 創創 建建 1 號號 進進 程程 完完 成成 init 1 號號 進進 程程 創創建建 終終 端端 1 1 號號 進進 程程 創創建建 終終 端端 2 1 號號 進進 程程 創創建建 終終 端端 n .
7、子子 進進 程程 子子 進進 程程 . 子子 進進 程程 整理課件2 UNIX2 UNIX中的進程中的進程2UNIX中進程的描述中進程的描述 運行中的每個進程都有一個獨立的運行環境,這個環境是進程生存的基運行中的每個進程都有一個獨立的運行環境,這個環境是進程生存的基礎,即礎,即進程上下文進程上下文 。 Proc User 系系 統統 棧棧 用用 戶戶 棧棧 數數 據據 段段 正正 文文 段段 整理課件3 UNIX3 UNIX進程調度和管理進程調度和管理 1進程調度的方法進程調度的方法 動態優先級多級反饋循環調度法公式:動態優先級多級反饋循環調度法公式: 2計算公式計算公式P-priP-cpuP
8、USER(25)P-niceNZERO(20) 優點:優點: 1)創建新進程,)創建新進程,cpu0, P-pri值較小,優先級較大值較小,優先級較大 2)使用越多,)使用越多,P-cpu越大,越大,P-pri值較大,優先級較小值較大,優先級較小 3)使用越少,)使用越少,P-cpu越小,越小,P-pri值較小,優先級較大值較小,優先級較大 整理課件4 4 進程存儲管理進程存儲管理 存儲管理的主要功能:存儲管理的主要功能:(1)存儲空間的分配,回收;)存儲空間的分配,回收;(2)地址變換;)地址變換;(3)存儲共享和保護;)存儲共享和保護;(4)存儲器擴充)存儲器擴充(5)提高主存的利用率)提
9、高主存的利用率計算機的存儲結構圖:計算機的存儲結構圖: 寄寄存存器器 高高速速緩緩存存 主主存存 輔輔存存 CPU CPU內內 系系統統內內存存 硬硬盤盤,光光盤盤,磁磁帶帶 訪訪問問速速度度 慢慢 存存儲儲空空間間 大大 單單位位價價格格 低低 整理課件4.1 4.1 進程存儲技術進程存儲技術 程序以進程的方式存放于內存中,程序以進程的方式存放于內存中,CPU在內存中實現進程之間在內存中實現進程之間的切換調度。采用一些策略和算法來分配存儲空間,使進程在內的切換調度。采用一些策略和算法來分配存儲空間,使進程在內存和磁盤之間來回切換。此過程為進程的存儲管理過程。存和磁盤之間來回切換。此過程為進程
10、的存儲管理過程。 1連續分配存儲技術連續分配存儲技術 操作系統為運行的進程分配一個連續的內存空間操作系統為運行的進程分配一個連續的內存空間 (a) 單一連續分配存儲方式:單一連續分配存儲方式: 系系統統區區 用用戶戶區區 為為一一個個進進程程分分配配,適適用用了了單單用用戶戶單單任任務務的的系系統統管管理理,出出現現在在較較早早時時期期 整理課件4.1 4.1 進程存儲技術進程存儲技術 系系統統區區 用用戶戶區區 1 可可以以連連續續放放多多個個進進程程,實實現現進進程程的的并并發發,但但是是有有碎碎片片產產生生,可可以以利利用用內內存存緊緊縮縮技技術術 用用戶戶區區 2 . 1連續分配存儲技
11、術連續分配存儲技術 操作系統為運行的進程分配一個連續的內存空間操作系統為運行的進程分配一個連續的內存空間 (b)分區式連續存儲方式:分區式連續存儲方式: 整理課件4.1 4.1 進程存儲技術進程存儲技術 (1)覆蓋)覆蓋 目的:目的: 在較小的可用內存中運行較大的程序在較小的可用內存中運行較大的程序 原理:原理: 一個程序的幾個代碼段或數據段按照使用的先后順序以一個程序的幾個代碼段或數據段按照使用的先后順序以覆蓋方式占用共享內存區域。覆蓋方式占用共享內存區域。 原則:原則: 將程序中必要的數據放在常駐內存中。將程序中必要的數據放在常駐內存中。將不經常用的放在交換區。將不存在調用關系的模塊可以采
12、用覆將不經常用的放在交換區。將不存在調用關系的模塊可以采用覆蓋方式共享內存分區。蓋方式共享內存分區。(2 2)交換:在多個程序并發執行的時候,將暫時不執行的代碼放)交換:在多個程序并發執行的時候,將暫時不執行的代碼放入交換區,從而可以用更大的內存空間裝入新的進程。入交換區,從而可以用更大的內存空間裝入新的進程。 2覆蓋和交換技術覆蓋和交換技術整理課件4.1 4.1 進程存儲技術進程存儲技術 3頁式存儲管理頁式存儲管理 解決內存碎片,提高內存的利用率解決內存碎片,提高內存的利用率 1)基本思想:進程邏輯空間劃分為若干頁,內存劃分為若干物理頁。)基本思想:進程邏輯空間劃分為若干頁,內存劃分為若干物
13、理頁。進程按照頁的大小分配內存空間,可以連續或不連續分配。進程按照頁的大小分配內存空間,可以連續或不連續分配。頁號頁號頁面號頁面號05176212靜態頁式管理靜態頁式管理:進程在執行前將程序段和數據段一次性裝入內存的各個:進程在執行前將程序段和數據段一次性裝入內存的各個頁面中。頁面中。數據結構:數據結構: 進程頁表:每個進程都有進程頁表,邏輯頁號對應物理頁面號進程頁表:每個進程都有進程頁表,邏輯頁號對應物理頁面號 整理課件4.1 4.1 進程存儲技術進程存儲技術 請求表:系統有一個請求表,可以放到請求表:系統有一個請求表,可以放到PCB描述中描述中 進程號進程號請求數請求數頁表地址頁表地址頁表
14、長度頁表長度狀態狀態120102220已分配已分配 用于地址轉換用于地址轉換 存儲頁面表:存儲頁面表: 系統有一張,用于描述內存各個頁面的分配情況系統有一張,用于描述內存各個頁面的分配情況動態頁式管理動態頁式管理:只需要將執行部分調入(缺頁中斷則調入),動:只需要將執行部分調入(缺頁中斷則調入),動態管理程序各部分在內存中的調入調出。態管理程序各部分在內存中的調入調出。 整理課件4.1 4.1 進程存儲技術進程存儲技術 2)頁式管理的地址變換)頁式管理的地址變換 頁頁表表長長度度 頁頁表表地地址址 控控制制寄寄存存器器 8 有有效效地地址址 邏邏輯輯頁頁號號 物物理理頁頁號號 0 2 1 3
15、2 8 1C4 2 1C4(頁頁內內地地址址) 物物理理地地址址 整理課件4.1 4.1 進程存儲技術進程存儲技術 4段式存儲管理段式存儲管理 1)將內存分為不同的分區,視為二維空間,進程按照邏輯內容)將內存分為不同的分區,視為二維空間,進程按照邏輯內容分段。分段。 2)特點:以段為單位分配內存分區,段可以不連續。每個段可)特點:以段為單位分配內存分區,段可以不連續。每個段可以占用一個內存分區。內存管理采用動態分區方法,采用缺段中以占用一個內存分區。內存管理采用動態分區方法,采用缺段中斷處理。斷處理。 3)數據結構:進程段表)數據結構:進程段表整理課件4.2 4.2 虛擬存儲技術虛擬存儲技術
16、1局部性原理局部性原理 程序執行過程中,在較短的時期內,所執行的指令地址以及操程序執行過程中,在較短的時期內,所執行的指令地址以及操作數地址分別局限在一個區域內。作數地址分別局限在一個區域內。 時間局限性:時間局限性: 當前指令執行與下條指令執行,數據的當前訪問當前指令執行與下條指令執行,數據的當前訪問和下次訪問集中在一個時間段中。和下次訪問集中在一個時間段中。 空間局部性:空間局部性: 當前訪問指令和臨近訪問的指令,當前訪問的數當前訪問指令和臨近訪問的指令,當前訪問的數據和臨近訪問的數據集中在一個較小區域內。據和臨近訪問的數據集中在一個較小區域內。 原因:大部分程序在空間上順序執行,在時間上
17、循環執行原因:大部分程序在空間上順序執行,在時間上循環執行整理課件4.2 4.2 虛擬存儲技術虛擬存儲技術 2虛存的原理虛存的原理 只需將當前需要執行的部分頁和部分段讀入到內存中就可讓只需將當前需要執行的部分頁和部分段讀入到內存中就可讓程序開始執行。程序開始執行。利用缺頁和缺段請求,動態實現存儲管理。利用缺頁和缺段請求,動態實現存儲管理。 3特點:特點:存儲空間變大存儲空間變大 內存外存,內存外存, 支持程序的并發執行支持程序的并發執行,采用部分交換。采用部分交換。 4虛擬存儲器的種類虛擬存儲器的種類 1)頁式虛存)頁式虛存 2)段式虛存)段式虛存 3)段頁式虛存)段頁式虛存 整理課件5 UN
18、IX5 UNIX進程存儲管理進程存儲管理 1交換策略交換策略 早期早期 內存和交換區之間傳送整個進程內存和交換區之間傳送整個進程 費時,影響效率費時,影響效率 現代現代 部分交換部分交換 關鍵信息,關鍵信息,PCB不參與交換,常駐內存。不參與交換,常駐內存。 0號進程負責調度和交換工作,無限循環的執行。號進程負責調度和交換工作,無限循環的執行。 數據結構數據結構 映射圖來管理交換設備的空間資源,包含可分映射圖來管理交換設備的空間資源,包含可分配的資源地址及該地址可用的資源單位。配的資源地址及該地址可用的資源單位。 UNIX系統采用交換和請求調頁兩種策略完成存儲管理系統采用交換和請求調頁兩種策略
19、完成存儲管理整理課件5 UNIX5 UNIX進程存儲管理進程存儲管理 2請求調頁策略請求調頁策略 內存分頁內存分頁 外存分頁外存分頁 進程運行時系統只在內存中保留當前活動進程的某些頁面,而進程運行時系統只在內存中保留當前活動進程的某些頁面,而不放入整個進程頁面不放入整個進程頁面 缺頁中斷缺頁中斷 虛存技術不受空間限制虛存技術不受空間限制 為了提高運行效率,核心進程提供了一個工作區,存放內存中為了提高運行效率,核心進程提供了一個工作區,存放內存中最近被訪問過的頁面集合。最近被訪問過的頁面集合。 3UNIX系統中進程存儲管理結構系統中進程存儲管理結構 Proc User PCB 放內存中放內存中
20、放外存中放外存中 整理課件8 UNIX8 UNIX進程管理的系統調用進程管理的系統調用 例題:例題:#include #include main()main() int pid; int pid; pid = fork(); pid = fork(); if ( pid 0 ) if ( pid 0 ) p r i n t f ( “ f o r k f a i l e d ! ” ) ; p r i n t f ( “ f o r k f a i l e d ! ” ) ; exit(1); exit(1); if( pid = = 0) if( pid = = 0) exec(“ls”,
21、“-l”,0); exec(“ls”, “-l”,0); else else printf(“This is the parent process”); printf(“This is the parent process”); 整理課件8 UNIX8 UNIX進程管理的系統調用進程管理的系統調用parentchildchildchildparentforkexecexit自動wait 整理課件6 UNIX6 UNIX進程控制進程控制 include int getpid(void); int getppid(void);getpidgetpid函數返回調用進程的進程函數返回調用進程的進程ID
22、IDgetppidgetppid函數則返回調用進程的父進程函數則返回調用進程的父進程IDID。include int fork(void);forkfork函數創建一新進程。函數創建一新進程。整理課件6 UNIX6 UNIX進程控制進程控制 #include #include #include “err_exit.h”int global = 5;int main(void) int pid; char *string = “these are values before fork:”; int local =10; printf( “before fork *”); if( (pid = f
23、ork( ) )0) /fork調用失敗調用失敗 err_exit (“fork”);整理課件6 UNIX6 UNIX進程控制進程控制UNIX系統在實現fork()調用完成的主要工作:1)為子進程在進程表中分配一個空閑的proc結構2)賦給子進程一個唯一的進程標識符pid3)復制一個父進程上下文的邏輯副本4)增加與父進程相關聯的文件表和索引節點表的引用次數5)對父進程返回子進程的標識符為pid.對子進程返回標識符pid.整理課件6 UNIX6 UNIX進程控制進程控制 if( pid = 0) /*子進程子進程*/ printf (“Its Child process, pid is %dn”
24、, getpid ();else /*父進程父進程*/ printf( “Its Father process pid is %dn”, getpid();exit( EXIT_SUCCESS );整理課件6 UNIX6 UNIX進程控制進程控制 include external char *environ;int execl(const char *path,const char *arg0,);int execlp(const char *file,const char *arg0,);int execle(const char *path,const char *arg0,), cons
25、t char *envp);int execv(const char *path,const char *argv);int execvp(const char *file,const char *argv);int execve(const char *path,const char *argv, const char *envp);這這6 6個函數具有相同的功能,它們都能用新程序的程序映像個函數具有相同的功能,它們都能用新程序的程序映像覆蓋進程原來的程序映像。新程序文件名由參數覆蓋進程原來的程序映像。新程序文件名由參數pathpath或或filefile給出,它的程序代碼將替代原來的程序代
26、碼被執行。給出,它的程序代碼將替代原來的程序代碼被執行。整理課件6 UNIX6 UNIX進程控制進程控制Main().Printf(“onen”):Execl(/bin/ls”,”ls”,0);Printf(“twon”);Perror(“exec error);.6 UNIX6 UNIX進程控制進程控制整理課件6 UNIX6 UNIX進程控制進程控制 #include #include #include “err_exit.h”int main(void) pid_t pid; if(pid = fork( )0) err_exit(“fork error”); else if (pid =
27、 0) if( (“/demo.exe”, “myarg1”, “MYARG2”,(char*)0)0) err_exit(“execle error”); exit(EXIT_SUCCESS);整理課件6 UNIX6 UNIX進程控制進程控制 char *arg=“file1”,“file2”,0;Char *env=“PATH=/home/usr”,”TERM=console”,0int main(void) execl(“/bin/mycat”,”file1”,”file2”,(char*)argv0); execlp(“mycat”, ”file1”,”file2”,(char*)ar
28、gv0); execle(“/bin/mycat”,”file1”,”file2”,(char*)argv0, env); execv(“/bin/mycat”,arg); execvp(“mycat”, arg); execvle(“/bin/mycat”,arg, env);整理課件6 UNIX6 UNIX進程控制進程控制 include int wait(int *stat_loc);int waitpid(pid_t pid,int *stat_loc,int options); 通常,父進程用通常,父進程用forkfork派生了一個子進程后,常常會需要等待子進派生了一個子進程后,常常
29、會需要等待子進程執行完后才能繼續執行。程執行完后才能繼續執行。 UNIXUNIX提供了兩個函數來等待子進程的結束提供了兩個函數來等待子進程的結束wait和和waitpid函數允許等待子進程結束,并獲取其子進程的狀態信息。函數允許等待子進程結束,并獲取其子進程的狀態信息。wait(stat_loc)相當于相當于waitpid(-1, stat_loc,0)整理課件6 UNIX6 UNIX進程控制進程控制 例例1:#include#include#include#include “err_exit.h”int main(void) pid_t pid; int status; if( (pid =
30、 fork() 0 ) /派生子進程派生子進程 1 err_exit(“call fork() failed!”); else if ( pid = 0 ) /子進程子進程 1 exit(1); if ( wait(&status) != pid ) /等待子進程等待子進程1的結束的結束 err_exit(“call wait() failed”);整理課件6 UNIX6 UNIX進程控制進程控制main()int pid;printf(“just I process now.n”);printf(“calling fork()n”);pid=fork();if (pid=0) pri
31、ntf(“I am the childn”); exit(1);else wait(0);printf(“I am thr parentn”);elseprintf( “fork failed.n”);Printf(“program end.n”);整理課件6 UNIX6 UNIX進程控制進程控制 6.4 6.4 進程終止與僵死進程進程終止與僵死進程1 1、正常終止、正常終止(a a)從)從mainmain函數內執行函數內執行returnreturn。這相當于調用。這相當于調用exitexit。(b b)調用)調用exitexit函數。函數。(c c)調用)調用_exit_exit函數,該函數
32、由函數,該函數由exitexit調用并處理與調用并處理與UNIXUNIX相關相關的特定細節。的特定細節。整理課件6 UNIX6 UNIX進程控制進程控制 6.4 6.4 進程終止與僵死進程進程終止與僵死進程2 2、異常終止、異常終止(a a)調用)調用abortabort函數。函數。(c c)當進程收到某種信號時。)當進程收到某種信號時。整理課件6 UNIX6 UNIX進程控制進程控制 6.4 6.4 進程終止與僵死進程進程終止與僵死進程 僵死進程一般指的是已經終止但并沒有由父進程等待的進程僵死進程一般指的是已經終止但并沒有由父進程等待的進程整理課件6 UNIX6 UNIX進程控制進程控制 例
33、例 1int main(void) pid_t pid; int n; printf(“fork program startingn”); pid = fork(); switch(pid) case 0: exit(0); default: sleep(5); break; exit(EXIT_SUCESS);該子進程將成為僵死進程該子進程將成為僵死進程整理課件6 UNIX6 UNIX進程控制進程控制 例例 2int main(void) pid_t pid; int n; printf(“fork program startingn”); pid = fork(); switch(pid) case 0: exit(0); default: sleep(60000); /在父進程在父進程sleep期間,子進程為僵死狀態期間,子進程為僵死狀態 wait(&n); /僵死的子進程被釋放僵死的子進程被釋放 exit(EXIT_SUCESS);整理課件6 UNIX6 UNIX進程控制進程控制 # ps alS UID PID PPID TIME COMDR 181 2081 1872 0:00 ps S 181 2074 1872 0:00 testZ 181 2080 2074 0:00 S 181
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 熱帶雨林生態特征試題及答案
- 如何在家打造個性化學習環境與方案分享
- 婦產科患者教育與溝通技巧
- 以自然為師民族風格室內設計的新思路
- 2024-2025學年高中語文 第8課 小狗包弟教學實錄 新人教版必修1
- 2025執業獸醫考試技巧總結試題及答案
- 創新思維在學生學習中的應用
- 寵物殯葬師完善服務的考核內容試題及答案
- Module 9 Unit 1 第一課時教學設計 2024-2025學年外研版八年級英語上冊
- 9元日教學設計-2023-2024學年三年級下冊語文統編版
- 《預制高強混凝土風電塔筒生產技術規程》文本附編制說明
- 2024年中國住院患者血糖管理專家共識
- 【MOOC】設計思維與創新設計-浙江大學 中國大學慕課MOOC答案
- 《如何說孩子才會聽怎么聽孩子才肯說》讀書分享
- 旅客列車安全平穩操縱辦法
- 《混凝土結構設計原理》全套教學課件
- 醫療安全(不良)事件報告制度培訓課件
- 《用單擺測量重力加速度》說課稿
- 人教版九年級上冊音樂 1.5中國人民解放軍軍歌 教案
- 2024報關員勞動合同范本(標準版)
- 工業園保潔綠化服務投標方案(技術方案)
評論
0/150
提交評論