freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢設(shè)論文-基于linux平臺的聊天軟件的設(shè)計與研究-資料下載頁

2025-06-05 02:58本頁面
  

【正文】 ssize_t send(int sock_fd, const void *buf, size_t buf_len, int flags) 函數(shù)說明 往指定 sock_fd 的 socket 發(fā)送 消息 參數(shù)說明 buf 發(fā)送數(shù)據(jù)存放的暫存區(qū) buf_len 暫存區(qū)的 大小 (7)recv()相關(guān)定義如下表 所示: 表 recv 函數(shù)定義 原型 ssize_t recv(int sock_fd, void *buf, size_t buf_len, int flags) 函數(shù)說明 從指定 sock_fd 的 socket 中讀取數(shù)據(jù) 參數(shù)說明 buf 發(fā)送數(shù)據(jù)暫時存放 的區(qū)域 buf_len 暫存區(qū)的 大小 (8)close() 格式: close(fd) 進程 進程的概念 (1)在說明 進程 前,先看一下 什么是程序? 程序就是一個文件,該文件包含了一系列信息,這些信息描述了如何在運行時構(gòu)造一個進程。 (2)Linux 平臺中可執(zhí)行程序類型 ① 可執(zhí)行目標(biāo)文件 經(jīng)鏈接器鏈接后可直接執(zhí)行的文件 。內(nèi)核通常 支持幾種特定形式 的可執(zhí)行文件。 ELF 格式是 Linux 系統(tǒng)中普遍使用的一種標(biāo)準(zhǔn)的可執(zhí)行文件格式。 ② 可執(zhí)行腳本 南京工程學(xué)院畢業(yè)設(shè)計說明書(論文) 第 26 頁 Bash 就是 shell 或者說是命令行 語言 解釋器 。 GNU 操作系統(tǒng)提供不同的shell,其中包含 csh、 ksh,但是 bash 是默認(rèn)的 bsh。 和其他 GNU 軟件一樣,bash 是可移植的 ,其目前運行在幾乎所有版本的 Unix 及其他的操作系統(tǒng)上 ,像 MSDOS、 os/2 和微軟平臺 。 當(dāng) Shell 讀到輸入時 ,展開一系列的操作。如果檢測到有注釋時會自動忽略以 ‘’ 開頭這一行 。 然后, shell 將讀取到的內(nèi)容分成各個部分 ,再將這些解析成命令和其他結(jié)構(gòu) ,去掉一些特定的字或者字符 ,執(zhí)行特定的命令 。 下面是其執(zhí)行流程 : 1)從文件中讀取輸入 2)將 讀取到的內(nèi)容 按引用準(zhǔn)則 分成字和運算符 。 這些標(biāo)號被通配符 分隔 3)將 標(biāo)號 解析成 單一的或復(fù)合的命令 4)執(zhí)行各種 shell 展開 5)執(zhí)行一些必要的重定向 并將這些操作符及操作數(shù)從參數(shù)列表中移除 6)執(zhí)行命令 7)選擇性的等待命令執(zhí)行完成 并記錄退出狀態(tài) 。 (3)什么 是 進程 進程的專業(yè)定義 , IEEE Std :“ An address space with one or more threads executing within that address space, and the required system resources for those threads” 。通俗的講,就是一個正在運行的程序 ,每個程序都有自己的執(zhí)行狀態(tài)和地址 空間 ,每個進程相互獨立 ,除了兩個進程發(fā)生通信 ,否則兩個進程沒有多大關(guān)系 。 (4)不同進程的區(qū)分方法 (內(nèi)核 ) 每個進程都有一個屬于自己的 id號 叫做 PID,就像我們每個人都有一個自己的身份證號 一 樣 , PID 標(biāo)識著這個進程的存在 。 內(nèi)核通過這個 PID 來管理各個進程的狀態(tài)和資源 。一個內(nèi)核產(chǎn)生新的 PID 時,內(nèi)核為這個 PID 分配系統(tǒng)資源 ,這樣一個進程也就產(chǎn)生了 。 進程的內(nèi)存布局 進程 內(nèi)存分布圖如圖 所示 : 從低地址到高地址依次分布 南京工程學(xué)院畢業(yè)設(shè)計說明書(論文) 第 27 頁 堆代碼段初始化的數(shù)據(jù)未初始化的數(shù)據(jù) ( b s s )棧高地址低地址命令行參數(shù)和環(huán)境變量ex ec 初始化數(shù)據(jù)為 0ex ec 從程序文件中讀取 圖 進程內(nèi)存分布 進程生命周期 ① 創(chuàng)建 :進程的創(chuàng)建是由其父進程通過 folk 來創(chuàng)建的 。 下圖描述了進程的創(chuàng)建過程 : ② 運行 : 同一系統(tǒng)中可以有多個進程同時運行,并且能夠互相通信 。試想一下 ,一個系統(tǒng)上同一時刻只能運行一個進程 ,要開其他進程必須得先將本進程關(guān)閉掉,那是得有多么麻煩 。 ? ③ 終止 結(jié)束一個進程的運行。 南京工程學(xué)院畢業(yè)設(shè)計說明書(論文) 第 28 頁 多線程 線程的概念 線程是 系統(tǒng) 最小的調(diào)度單元 ,是操作系統(tǒng)的重要組成部分 。 操作系統(tǒng)中, 線程和進程的實現(xiàn) 是不同的 ,單線程通常是進程的一部分 。多個線程 可以 在同一個 進程中執(zhí)行 ,和進程共享 內(nèi)存資源 ,這是不同進程之間所不能 做到的。 與進程相比,線程沒有自己獨立的地址空間,創(chuàng)建出來的新線程將和創(chuàng)建它的進程 (或線程 )共享一個虛擬地址空間,它們被置于同一個線程組中。 每個線程都有自己獨立的??臻g 。 不管是服務(wù)器還是客戶機都包含信息的一收一發(fā)兩個過程 。 同時使用主線程去收發(fā)信息是不可取的,因為收信息是被動的,當(dāng)沒有信息可收時主線程就會阻塞,從而影響信息的發(fā)送。 而 創(chuàng)建兩個進程的方法在這里 也是 是不可取的,因為不同的進程對應(yīng)不同的端口號 ,但是信息的發(fā)送和接收必須使用同一 端口。因此必須創(chuàng)建多個線程 來完成不同的收發(fā)任務(wù) 。 進程和線程的關(guān)系 及優(yōu)缺點 線程在進程中的分布 如圖 所示 : 南京工程學(xué)院畢業(yè)設(shè)計說明書(論文) 第 29 頁 代碼段未初始化的數(shù)據(jù) ( bs s )堆共享的庫文件和內(nèi)存線程 1 的棧線程 2 的棧線程 3 的棧參數(shù)和環(huán)境變量主線程棧初始化的數(shù)據(jù)虛擬內(nèi)存地址 ( 十六進制 )0 xC 0 0 0 0 0 0 00 x 4 0 0 0 0 0 0 0T A S K _ U N M A P P E D _ BA S E0 X 0 8 0 4 8 0 00 X 0 0 0 0 0 0 0線程 3 執(zhí)行主線程執(zhí)行線程 1 執(zhí)行線程 2 執(zhí)行 圖 進程中的線程 使用線程的優(yōu)點: ① 較快的執(zhí)行 (Faster execution):在多核 CPU 上執(zhí)行明顯快于單核 CPU,且 上下文 狀態(tài)的 切換比進程快 ; ② 響應(yīng)迅速 (Responsiveness):當(dāng)主線程阻塞時,其他線程仍可和用戶進行交互 ; ? ③ 對資源的需求小 (Lower resource consumption):用較少的系統(tǒng)資源服務(wù)于更多的用戶 ; ④ 更好的系統(tǒng)利用 (Better system utilization):能更好的利用 內(nèi)存 的資源 ; ⑤ 簡單的分享和通信 (Simplified sharing and munication); ⑥ 并行化 (Parallelization):多個線程同時對一個任務(wù)進行操作 。 但是線程也有一些 缺點: 南京工程學(xué)院畢業(yè)設(shè)計說明書(論文) 第 30 頁 ① 同步 (Synchronization):由于共用相同的地址空間 ,那么就要很好的解決競爭 和其他的非正常行為 。 如果處理不好,會造成死鎖的情況,那么進程就會變?yōu)榻┧肋M程 ; ② 在進程中崩潰 (Crash in process):線程的 非法操作 從而造成整個進程的退出 。 數(shù)據(jù)類型及其用法 函數(shù)簡要說明 如下表 所示: 表 線程函數(shù)定義 函數(shù) 功能 typedef unsigned long int pthread_t /usr/include/bits/ pthread_create() 創(chuàng)建一個線程 pthread_exit() 終止當(dāng)前線程 pthread_join() 阻塞當(dāng)前線程,直到另一線程退出 線程的創(chuàng)建 與結(jié)束 (1) 新線程 的創(chuàng)建 可通過 pthread_create(), 定義及說明 如下 表 : 表 pthread_create 函數(shù)定義 原型 int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine)(void*), void *args)。 參數(shù)說明 thread 指向一個 pthread_t 型變量,用于返回線程 ID attr 指定 各種不同 屬性,若設(shè)為 NULL,表示默認(rèn)屬性 start_routine 新線程的工作函數(shù) args 傳遞給執(zhí)行函數(shù)的參數(shù) 返回值 0 表示執(zhí)行成功,出錯返回錯誤編號 (EAGAIN、 EINVAL) (2)pthread_join(),等待一個線程執(zhí)行 結(jié)束 (與 waitpid()類似 ),相關(guān)定義如南京工程學(xué)院畢業(yè)設(shè)計說明書(論文) 第 31 頁 下表 所示: 表 pthread_join 函數(shù)定義 原型 int pthread_join(pthread_t thread, void **value_ptr) 參數(shù)說明 thread 指定要等待 哪個 線程 value_ptr 是指向 (void *)型數(shù)據(jù)的指針,用于獲得線程的退出狀態(tài) (the value that was specified when the thread performed a return or called pthread_exit()),如果不需要退出狀態(tài)則可將其設(shè)為 NULL 返回值 成功返回 0,錯誤返回一個非負(fù)數(shù) (3)pthread_exit() void pthread_exit(void *value_ptr)。 該函數(shù)終止當(dāng)前 線程 (calling thread),并且指定一個返回值,返回值可以在其他線程中通過調(diào)用 pthread_join()獲得。 綜上所述,線程在 一下 情況下退出 : ① 程序調(diào)用 pthread_exit() ② 調(diào)用 pthread_cancle() ③ 從回調(diào)函數(shù) start_routine 中 返回 ④ 調(diào)用 exit(),或者 主線程 退出 (終止進程中所有的線程 ) 線程同步 概念 線程同步,顧名思義就是對 某 一塊 內(nèi)存 的操作的先后順序 。當(dāng)這塊內(nèi)存中的數(shù)據(jù)是只讀的 ,那么其他線程都可以對其進行讀取,那就沒什么問題 ;或者說這塊內(nèi)存中的數(shù)據(jù)不會被其他線程讀取或修改,那么也不存在同步的問題 。只有當(dāng)多個線程同時對某一塊內(nèi)存中的數(shù)據(jù)進行修改 時,多個線程都要對其進行修改,那么到底是哪一個線程先修改呢,此時就涉及到同步的問題 。 南京工程學(xué)院畢業(yè)設(shè)計說明書(論文) 第 32 頁 線程同步的幾種方法 :信號量、 自旋鎖、 互斥量 信號量 :操作系統(tǒng)之中,信號量通常是 一個 多個進程或線程 用于控制 訪問權(quán)限 的 變量或抽象數(shù)據(jù)類型 。 信號量 可 被增加或減少 , 但 將保證對 其關(guān)鍵的 是原子操作 ,即有多個線程試圖改變 一個信號量的值時,系統(tǒng)將保證所有操作依次進行 。 自旋鎖: 線程為了獲得自旋鎖,通過不斷 循環(huán) 檢查 該鎖是否可獲得 。這個鎖是出于激活狀態(tài)的,但是對當(dāng)前任務(wù)并不可用 ,這就有點類似于忙時等待的情況 。一旦獲得 ,當(dāng)前線程將會執(zhí)行,同時 該鎖也會被處理 直到被釋放 ,在一些實現(xiàn)中可能 會自動釋放 。 互斥量 (mutex)從概念上講 有點 類似于一個 初始值為 1 二進制信號量?;コ饬勘猾@取之后就不能再被獲取,因此對互斥體的獲取和釋放操作常常稱為加鎖和解鎖操作。 互斥量只能由獲取它的線程進行釋放,如果違反這一原則,則結(jié)果是未定義的。 互斥量就是當(dāng)前線程對其正在訪問的共享資源上鎖,等其用完了,再對其進行解鎖,讓其他等待的線程使用 。 當(dāng)一個共享資源被 mutex 上鎖后,其他任何線程都無法對這塊共享資源 進行修改 。 互斥量的使用 互斥量用一個 pthread_mutex_t 型的變量表示。 其定義如下表 所示: 表 pthread_mutex_init 函數(shù)定義 原型 int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutexattr_t *attr)。 函數(shù)說明 對 mutex 進行初始化 參數(shù)說明 mutex 指向要初始化的互斥量 attr 參數(shù)可以為 NULL,表示使用默認(rèn)屬性 互斥量不用以后,應(yīng)該使用下面的函數(shù)進行銷毀: int pthread_mutex_destroy(pthread_mutex_t *mutex)。 南京工程學(xué)院畢業(yè)設(shè)計說明書(論文) 第 33 頁 互斥量的主要操作函數(shù)如下表 所示: 表 互斥量主要函數(shù)說明 函數(shù)原型 簡要說明 int pthread_mutex_lock(pthread_mutex_t *mutex) 上鎖 int pthread_mutex_trylock(pthread_mutex_t *mutex) 上鎖 int pthread_mutex_unlock(pthread_mutex_t *mutex) 解鎖 各函數(shù)詳細(xì)說明 : pthread_mutex_lock(): 將其 指向的資源 加鎖。如果這時互 已經(jīng)被鎖,則調(diào)用這個函數(shù)的線程將被阻塞,直到其 成
點擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1