第二章 進程和線程_第1頁
第二章 進程和線程_第2頁
第二章 進程和線程_第3頁
第二章 進程和線程_第4頁
第二章 進程和線程_第5頁
已閱讀5頁,還剩62頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、第二章第二章 進程和線程進程和線程2022年年7月月5日日Page 2本章內(nèi)容本章內(nèi)容 2.3 進程操作 2.1 進程概念 2.2 進程調(diào)度 2.4 進程間通信本章內(nèi)容(續(xù))本章內(nèi)容(續(xù)) 2.7 作業(yè)和實踐實驗 2.5 線程概念 2.6 多線程模型Page 3思考案例思考案例 小明在一臺電腦上打開多個應用程序,有如下程序:QQ應用程序、IE瀏覽器、LOL、記事本程序。思考和分析為什么多個應用程序之間能夠做到同時運行而互不影響?這些程序是以什么為單位執(zhí)行的?上述并行運行程序操作系統(tǒng)是怎么實現(xiàn)的?Page 4Page 5案例分析案例分析 上述案例中提到了很多應用程序并行,如QQ、LOL、記事本等

2、程序。我們學過組成原理知道:大部分程序的調(diào)用都要經(jīng)過CPU,那CPU是以什么方式來調(diào)用這些應用程序的呢?進程Page 6本章內(nèi)容本章內(nèi)容 2.1 進程概念進程概念進程概念 目前電腦上的應用軟件非常多,我們常用的QQ是不是一個進程呢?你們常玩的英雄聯(lián)盟(LOL)是一個進程嗎?如果是進程,為什么是進程呢?如果不是進程,應該是什么?請用2分鐘時間討論這個話題。Page 7進程概念進程概念通過上述案例,既然這些不是進程,只是應用程序,那進程是什么?Page 8Page 9進程概念進程概念進程是程序的一次執(zhí)行進程是程序在一個數(shù)據(jù)集合上運行的過程,它是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位進程是一個程序及其

3、數(shù)據(jù)在處理機上順序執(zhí)行時所發(fā)生的活動本書定義:是一個具有一定獨立功能的程序關于某個數(shù)據(jù)集合的一次運行活動。涵蓋:程序代碼、當前活動、堆棧段、數(shù)據(jù)段Page 10進程概念進程概念了解了進程和程序,進程和程序的區(qū)別是什么呢?Page 11進程概念進程概念VS程序進程火車列車VS區(qū)別是什么?區(qū)別是什么?列車是運動中的火車,而火車是靜止的。鐵路運輸系統(tǒng)中,要對列車進行管理以確保火車運行的安全。區(qū)別是什么?區(qū)別是什么?進程是動態(tài)的、程序時靜態(tài)的。在操作系統(tǒng)中,要對進程進行管理以保證程序執(zhí)行的安全可靠。Page 12思考:在使用QQ的時候,我們不會一直聊天,有的時候掛著QQ,在聊天和掛QQ的時候,進程處于

4、什么狀態(tài)?Page 13進程狀態(tài)進程狀態(tài)(重點重點) 進程的5個狀態(tài):新建、就緒、執(zhí)行、阻塞、終止確認確認事件或事件或I/O完成完成中斷中斷調(diào)度調(diào)度等待事件或等待事件或I/O終止終止運行狀態(tài)運行狀態(tài)新建狀態(tài)新建狀態(tài)就緒狀態(tài)就緒狀態(tài)阻塞狀態(tài)阻塞狀態(tài)終止狀態(tài)終止狀態(tài)Page 14進程狀態(tài)進程狀態(tài) 運行一個程序,操作系統(tǒng)會就會創(chuàng)建進程,并為它分配資源(主要是內(nèi)存空間),并等待分配CPU資源,轉(zhuǎn)入就緒狀態(tài)。新建就緒運行當進程已獲得處理機,其程序正在處理機上執(zhí)行,此時的進程狀態(tài)稱轉(zhuǎn)為執(zhí)行狀態(tài)。阻塞當進程被阻塞或者等待觸發(fā)事件時(比如等待I/O的輸入結(jié)束),就轉(zhuǎn)為阻塞狀態(tài)(有的課本稱為等待狀態(tài))當觸發(fā)事件

5、發(fā)生時(如I/O輸入結(jié)束),進程由等待狀態(tài)轉(zhuǎn)為就緒狀態(tài)進程被強制中斷或優(yōu)先級更高的進程到來時,從執(zhí)行狀態(tài)轉(zhuǎn)為就緒狀態(tài)終止進程在被執(zhí)行完畢時,調(diào)用exit(),釋放資源回顧和思考:了解了的5種狀態(tài),進程在操作系統(tǒng)內(nèi)是以什么形式來展示的呢? 進程在操作系統(tǒng)內(nèi)是以“進程控進程控制塊(制塊(PCB)” 來表示Page 15Page 16進程控制塊進程控制塊 每個進程在OS內(nèi)用進程控制塊來表示,進程控制塊(或任務控制塊),包含如下特定進程相關信息:進程狀態(tài)程序計數(shù)器CPU寄存器CPU調(diào)度信息內(nèi)存管理信息記賬信息I/O狀態(tài)信息進程控制塊(進程控制塊(PCB)操作系統(tǒng)上怎么運行操作系統(tǒng)上怎么運行QQQQ和和

6、LOLLOL應用應用程序的呢?程序的呢? 應用程序在操作系統(tǒng)上執(zhí)行的不是程序,實際執(zhí)行的一個進程。進程的執(zhí)行不是主動的,而是通過“進程調(diào)進程調(diào)度度”來分配硬件資源進行操作的Page 17Page 18本章內(nèi)容本章內(nèi)容 2.2 進程調(diào)度進程調(diào)度進程調(diào)度-調(diào)度隊列調(diào)度隊列通過第一章的講述,現(xiàn)在的計算機都是多任務同時執(zhí)行和被調(diào)度。所以進程進入系統(tǒng)時,都會被加入到作業(yè)隊列;駐留在內(nèi)存中等待運行的進程保存在就緒隊列中;等待特定I/O設備的進程列表則稱為設備隊列。調(diào)度隊列:包括系統(tǒng)中的所有進程:所有駐留在內(nèi)存中就緒的等待運行的進程列表:所有等待I/O設備的進程列表順序地執(zhí)行或者在外界條件干擾的情況下執(zhí)行,

7、這些隊列統(tǒng)稱為調(diào)度隊列。進程調(diào)度選擇一個可用的進程到CPU上執(zhí)行Page 19進程調(diào)度進程調(diào)度-隊列圖隊列圖進程調(diào)度常用的表示方法是隊列圖Page 20Page 21進程調(diào)度進程調(diào)度-調(diào)度程序調(diào)度程序進程在其生命周期內(nèi)會在各種調(diào)度隊列之間遷移。為了調(diào)度,操作系統(tǒng)會必須按照某種方式從這些隊列中選擇進程,進程選擇則是由相應的調(diào)度程序來執(zhí)行的調(diào)調(diào) 度度程程 序序長期調(diào)度程序長期調(diào)度程序短期調(diào)度程序短期調(diào)度程序 緩沖緩沖 池池放入選擇 裝裝 入入 內(nèi)內(nèi) 存存執(zhí)行 調(diào)度 調(diào) 度 長期調(diào)度程序長期調(diào)度程序(或作業(yè)調(diào)度) 從緩沖池中選擇進程,并將它們裝入內(nèi)存以執(zhí)行。短期調(diào)度程序短期調(diào)度程序(或CPU調(diào)度)

8、從就緒可執(zhí)行的進程中選擇進程,并為其中之一分配CPU 。Page 22進程調(diào)度進程調(diào)度-調(diào)度程序調(diào)度程序有些操作系統(tǒng)可能會引入中期調(diào)度程序,其核心思想是能進程從內(nèi)存(或從CPU競爭)中移出,從而降低多道程序設計的程度CPUCPU之后,進程能被重新調(diào)入內(nèi)存,并從中斷處繼續(xù)執(zhí)行。這種技術稱為交換換出的進程(已部分執(zhí)行)換出的進程(已部分執(zhí)行)就緒隊列就緒隊列I/OI/OI/OI/O等待隊列等待隊列換入換入換出換出結(jié)束結(jié)束Page 23如果來了一個優(yōu)先級較高的進程,當前執(zhí)行進程被中斷,這個進程還會被執(zhí)行嗎?Page 24進程調(diào)度進程調(diào)度-上下文切換上下文切換案例分析:CPU執(zhí)行優(yōu)先級較高的進程時,會

9、停止執(zhí)行當前進程,發(fā)生上下文切換(Context Switch)。1.掛起一個進程,并儲存該進程當時在內(nèi)存中所反映出的狀態(tài)2.從內(nèi)存中恢復下一個要執(zhí)行的進程,恢復該進程原來的狀態(tài)到寄存器,返回到其上次暫停的執(zhí)行代碼然后繼續(xù)執(zhí)行CS執(zhí)執(zhí)行步行步驟驟Page 25回顧和思考:通過之前的知識我們了解到進程被調(diào)度的各個狀態(tài),請問在調(diào)度之前這些進程是怎么創(chuàng)建的呢?Page 26本章內(nèi)容 2.3 進程操作進程操作(重點)進程操作進程操作進程創(chuàng)建進程終止Page 27進程操作進程創(chuàng)建觸發(fā)創(chuàng)建進程事件說明新的批處理作業(yè)通常位于磁盤或磁盤中的批處理作業(yè)控制流被提供給操作系統(tǒng)。當操作系統(tǒng)準備接納新工作時,它將讀取

10、下一個作業(yè)控制命令交互登錄終端用戶登錄到系統(tǒng)操作系統(tǒng)提供一項服務而創(chuàng)建操作系統(tǒng)可以創(chuàng)建一個進程,代表用戶程序執(zhí)行一個功能,使用戶無需等待(如控制打印的進程)由現(xiàn)有的進程派生基于模塊化的考慮,或者為了開發(fā)并行性,用戶程序可以指示創(chuàng)建多個進程任何一個計算機系統(tǒng)都必須為進程提供表示其完成的方法進程終止 通常有4 類事件會導致創(chuàng)建一個進程,如下表所示。 不論在哪種情況下,操作系統(tǒng)都負責新進程的創(chuàng)建。 例如,如果用戶請求打印一個文件,則操作系統(tǒng)可以創(chuàng)建一個管理打印的進程,進而使請求進程可以繼續(xù)執(zhí)行,與完成打印任務的時間無關。Page 28Page 29進程操作進程終止進程終止的方式有哪些?觸發(fā)終止進程事

11、件說明正常完成進程自行執(zhí)行一個操作系統(tǒng)服務調(diào)用,表示它已經(jīng)結(jié)束運行超過時限進程運行時間超過規(guī)定的時限無可用內(nèi)存系統(tǒng)無法滿足進程需要的內(nèi)存空間越界進程試圖訪問不存在的內(nèi)存單元保護錯誤進程試圖使用不允許使用的資源或文件或試圖以一種不正確的方式使用,如只讀文件中進行寫操作算術錯誤進程試圖進行被禁止的計算,如除以0時間超出進程等待某一事件發(fā)生的時間超過了規(guī)定的最大值Page 30進程操作進程終止觸發(fā)終止進程事件說明I/O失敗在輸入/輸出期間發(fā)生錯誤,如找不到文件;在規(guī)定次數(shù)內(nèi)讀寫失?。ù疟P遇到壞區(qū))或者無效操作(如從行式打印機中讀)無效指令試圖執(zhí)行一個不存在的命令(通常由于轉(zhuǎn)移到了數(shù)據(jù)區(qū)并企圖執(zhí)行數(shù)據(jù)

12、)特權(quán)指令進程試圖使用為操作系統(tǒng)保留的指令數(shù)據(jù)誤用錯誤類型或未初始化的一塊數(shù)據(jù)操作員或操作系統(tǒng)干涉由于某種原因,操作員或操作系統(tǒng)終止進程(如存在死鎖)父進程終止當一個父進程終止時,操作系統(tǒng)可能會自動終止該進程的所有后代進程父進程請求父進程通常具有終止其任何后代進程的權(quán)利Page 31思考:QQ有諸多功能,聊天和語音同時進行,兩個進程之間是怎么同步信息的呢? 進程之間的信息同步是通過 “進程進程間通信間通信” 進行的。Page 32本章內(nèi)容 2.4 進程間通信進程通信首先了解兩個定義:p獨立進程獨立進程:一個進程不能影響其他進程或被其他進程影響(如:不與其他進程共享數(shù)據(jù)的進程是獨立的)。p協(xié)作進

13、程協(xié)作進程:系統(tǒng)中的一個進程能影響其他進程或被其他進程所影響。 為什么要提供環(huán)境允許兩個進程協(xié)作呢?Page 33進程通信進程協(xié)作的原因:p信息共享信息共享:多個用戶可能對同樣的信息感興趣p提高運算速度提高運算速度:將任務分解為多個子任務,多個子任務并行執(zhí)行,可提高運算速度p模塊化模塊化:可能需要按模塊化構(gòu)造系統(tǒng)p方便方便:單個用戶也可能執(zhí)行多個任務p 協(xié)作進程,協(xié)作進程,在操作系統(tǒng)在操作系統(tǒng)內(nèi)是怎么通內(nèi)是怎么通信的呢?信的呢?Page 34進程通信通信通信方式方式共享內(nèi)存消息傳遞Page 35應用程序員編寫訪問和操作共享內(nèi)存的代碼操作系統(tǒng)提供機制進程通信-共享內(nèi)存共享內(nèi)存共享內(nèi)存互相通信的進

14、程間設有公共內(nèi)存,一組進程向該公共內(nèi)存中寫,另一組進程從公共內(nèi)存中讀。生產(chǎn)者-消費者例子。進程進程A共享共享進程進程B內(nèi)核內(nèi)核12Page 36進程通信-共享內(nèi)存共享內(nèi)存進程間如果采用共享內(nèi)存方式進行通信,需要通信進程建立共享內(nèi)存區(qū)域,該區(qū)域駐留在生成共享內(nèi)存段的進程的地址空間Page 37 進程間取消“一個進程不能訪問另一個進程的內(nèi)存空間的限制; 數(shù)據(jù)的形式或位置取決于進程而不是操作系統(tǒng); 多個進程不向同一區(qū)域同時寫數(shù)據(jù)。進程通信-共享內(nèi)存共享內(nèi)存生產(chǎn)者-消費者問題:生產(chǎn)者進程產(chǎn)生信息,消費者進程消費信息Page 38為了使得生產(chǎn)者進程和消費者進程并發(fā)執(zhí)行,必須提供一個緩沖區(qū)。 無限緩沖:對

15、緩沖區(qū)大小沒有限制 有限緩沖:緩沖區(qū)的大小有限制進程通信-消息傳遞消息傳遞消息傳遞系統(tǒng)為進程提供了兩個高級通訊原語Send和Receive。當要進行消息傳遞時執(zhí)行Send當接收者要接收信息時執(zhí)行Receive。進程進程A進程進程B內(nèi)核內(nèi)核MMM12Page 39進程通信-消息傳遞消息傳遞工具至少提供兩種操作: 發(fā)送(消息) 接受(消息)Page 40通信線路的邏輯實現(xiàn)方法: 直接或間接通信 同步或異步通信 自動或顯式緩沖命名命名直接通信直接通信:通信的每個進程必須明確地命名通信的接收者和發(fā)送者。原語send()和receive()的定義如下: send(P,message):發(fā)送消息到進程P;

16、 receive(Q,message):接收來自進程Q的消息。Page 41通信線路具有的屬性: 線路自動建立 一個線路只與兩個進程有關 每對進程之間只有一條線路對稱尋址命名命名非對稱尋址非對稱尋址:發(fā)送者命名接收者。接收者不需要命名發(fā)送者。send()和receive()的定義如下: send(P,message):發(fā)送消息到進程P; receive(id,message):接收來自任何進程的消息。Page 42對稱尋址和非對稱尋址限制了進程定義的模塊化,改變某一進程的名稱可能必須檢查所有其他進程的定義。命名命名間接通信間接通信:通過郵箱或端口發(fā)送和接收消息。每個郵箱有唯一的標識符。 一個進

17、程可能通過許多不同的郵箱與其他進程通信 兩個進程只有在共享至少一個郵箱時可互相通信Page 43命名命名原語send()和receive()的定義如下: send(A,message):發(fā)送一個消息到郵箱A; receive(A,message):接收來自郵箱A的消息。Page 44通信線路具有的屬性: 只有在兩個進程共享一個郵箱時,才能建立線路 一個線路可能與兩個或更多的進程相關聯(lián) 兩個通信進程之間可有多個不同的線路,每個線路對應于一個郵箱間接通信間接通信同步同步Page 45消息傳遞可以是阻塞阻塞或非阻塞非阻塞也稱為同步同步或異步異步。 阻塞send:發(fā)送進程阻塞,直到消息被接收進程或郵箱

18、所接收 非阻塞send:發(fā)送進程發(fā)送消息并再繼續(xù)操作 阻塞receive:接收者阻塞,直到消息可用 非阻塞receive:接收者收到一個有效消息或空消息緩沖緩沖Page 46進程通信所交換的消息都駐留在臨時隊列中,隊列實現(xiàn)有三種方法: :隊列的最大長度為0;線路中沒有消息處于等待;阻塞send,直到接收者接收消息 :隊列長度為有限的n;最多只能有n個消息等待;線路滿時,阻塞send直到隊列中的空間可用 :隊列長度可以無限;等待消息的數(shù)量不限;從不阻塞send零容量零容量有限容量有限容量無限容量無限容量IPC系統(tǒng)實例系統(tǒng)實例Page 47POSIXPOSIX POSIX標準定義了應該為應用程序提

19、供的接口標準,是IEEE要在各種Unix操作系統(tǒng)上運行的軟件而定義的一系列API標準的總稱 但POSIX并不局限于UnixIPC系統(tǒng)實例系統(tǒng)實例Page 48POSIX-POSIX-共享內(nèi)存:共享內(nèi)存: 利用系統(tǒng)調(diào)用shmget()創(chuàng)建共享內(nèi)存段 利用系統(tǒng)調(diào)用shmat()系統(tǒng)調(diào)用將共享內(nèi)存段加入進程的地址空間 利用系統(tǒng)調(diào)用shmdt()斷開共享內(nèi)存連接 利用系統(tǒng)調(diào)用shmctl(),從系統(tǒng)中刪除共享內(nèi)存段IPC系統(tǒng)實例系統(tǒng)實例Page 49MachMach 是一個用于支持操作系統(tǒng)研究的操作系統(tǒng)內(nèi)核,用于操作系統(tǒng)的研究,特別是在分布式與并行運算上,是最早實現(xiàn)微核心操作系統(tǒng)的例子之一 Mach的

20、最初設計目的是替代傳統(tǒng)的Unix內(nèi)核IPC系統(tǒng)實例系統(tǒng)實例Mach消息傳遞每個任務在創(chuàng)建時,創(chuàng)建兩個特別郵箱:內(nèi)核內(nèi)核郵箱郵箱和通報郵箱通報郵箱: 內(nèi)核使用內(nèi)核郵箱與任務通信 通報郵箱發(fā)送事件發(fā)生的通知Page 50三個系統(tǒng)調(diào)用: msg_send():向郵箱發(fā)送消息 msg_receive():接收消息 msg_rpc():執(zhí)行遠程過程調(diào)用(RPC),發(fā)送消息并只等待來自發(fā)送者的返回消息IPC系統(tǒng)實例系統(tǒng)實例Windows XP消息傳遞使用端口對象建立和維護兩進程之間的連接,兩種類型的端口: 連接端口,稱為對象,為所有進程可見 通信端口Page 51通信工作方式: 客戶機打開系統(tǒng)的連接端口對

21、象的句柄 客戶機發(fā)送連接請求 服務器創(chuàng)建兩個私有通信端口,并返回其中之一的句柄給客戶機 客戶機和服務器使用相應端口句柄以發(fā)送消息或回調(diào),并等待回答Page 52場景:一對情侶剛逛完商城到附近的咖啡廳休息,在女朋友的要求下,男生需要做的事情如下:1)幫女朋友找個靠窗的位置,2)幫女朋友買咖啡3)幫女朋友揉揉酸痛的腿 目前買咖啡的人在前面排隊的人很多,在這種情況下,你一個人是一個進程,需要執(zhí)行多任務,怎么辦?Page 53本章內(nèi)容 2.5 線程概念線程線程線程:是進程的一部分,一個沒有線程的進程可以被看作是單線程的。線程有時又被稱為輕權(quán)進程或輕量級進程,也是 CPU 調(diào)度的一個基本單位。線程由線程

22、ID、程序計數(shù)器、寄存器集合和棧組成。Page 54線程線程Page 55代碼數(shù)據(jù)文件寄存器棧線程線程代碼數(shù)據(jù)文件寄存器棧寄存器棧寄存器棧單線程進程多線程進程線程線程多線程編程的優(yōu)點: 響應度高 資源共享 經(jīng)濟 多處理器體系結(jié)構(gòu)的利用Page 56線程回顧:操作系統(tǒng)執(zhí)行回顧:操作系統(tǒng)執(zhí)行的是進程,現(xiàn)在多出的是進程,現(xiàn)在多出了線程的概念,進程了線程的概念,進程的的“分身分身”?進程和?進程和線程有什么區(qū)別?線程有什么區(qū)別?Page 57Page 58線程進程線程定義具有一定獨立功能的程序關于某個數(shù)據(jù)集合上的一次運行活動,是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位是進程的一個實體,是CPU調(diào)度和分派的

23、基本單位。劃分尺度 一個進程包含一個或多個線程一個線程是CPU調(diào)度最小單位,依附于進程存在資源分配 分配資源的基本單位同一進程內(nèi)多個線程共享資源地址空間 擁有獨立的地址空間同一進程內(nèi)多個線程共享資源調(diào)度通過操作系統(tǒng)調(diào)度CPU調(diào)度執(zhí)行情況 可以獨立執(zhí)行不能獨立執(zhí)行,必須組成進程進行執(zhí)行思考:我們了解思考:我們了解了線程的基礎知了線程的基礎知識,操作系統(tǒng)有識,操作系統(tǒng)有哪些線程?哪些線程?本章內(nèi)容 2.6 多線程模型Page 59多線程模型(重點)不依賴于OS核心,應用進程利用線程庫提供創(chuàng)建、同步、調(diào)度和管理線程的函數(shù)來控制用戶線程。(如圖形處理Aldus PageMaker)。用戶線程的維護需要應用進程來完成,內(nèi)核不了解用戶線程的存在,用戶線程切換不需要內(nèi)核特權(quán),用戶線程調(diào)度算法可針對應用優(yōu)化。Page 60用戶線程:多線程模型(重點)依賴于OS核心,由內(nèi)核創(chuàng)建和撤銷,用來執(zhí)行一個指定的函數(shù)。內(nèi)核維護進程和線程的上下文信息,線程切換由內(nèi)核完成,一個線程因發(fā)起系統(tǒng)調(diào)用而阻塞,不會影響其他線程的運行,時間片分配給線程,所以多線程的進程獲得更多CPU時間。Page 61內(nèi)核線程:多線程模型(重點)Solaris 2的內(nèi)核線程和用戶線程思考:圖中用戶線程和內(nèi)核線程對應的關

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論