計算機作業系統實驗!fork()的意思

時間 2022-04-09 19:45:15

1樓:匿名使用者

在linux中,只有一個函式可以建立子程序:fork。

#include

#include

pid_t fork(void);

由f o r k建立的新程序被稱為子程序( child process)。該函式被呼叫一次,但返回兩次。兩次返回的區別是子程序的返回值是0,而父程序的返回值則是新子程序的程序i d。

將子程序i d返回給父程序的理由是:因為一個程序的子程序可以多於一個,所以沒有一個函式使一個程序可以獲得其所有子程序的程序i d。f o r k使子程序得到返回值0的理由是:

一個程序只會有一個父程序,所以子程序總是可以呼叫g e t p p i d以獲得其父程序的程序i d (程序id 0總是由交換程序使用,所以一個子程序的程序i d不可能為0 )。

子程序和父程序共享很多資源,除了開啟檔案之外,很多父程序的其他性質也由子程序繼承:

• 實際使用者i d、實際組i d、有效使用者i d、有效組i d。

• 新增組i d。

• 程序組i d。

• 對話期i d。

• 控制終端。

• 設定-使用者- i d標誌和設定-組- i d標誌。

• 當前工作目錄。

• 根目錄。

• 檔案方式建立遮蔽字。

• 訊號遮蔽和排列。

• 對任一開啟檔案描述符的在執行時關閉標誌。

• 環境。

• 連線的共享儲存段。

• 資源限制。

父、子程序之間的區別是:

• fork的返回值。

• 程序i d。

• 不同的父程序i d。

• 子程序的t m s _ u t i m e , t m s _ s t i m e , t m s _ c u t i m e以及t m s _ u s t i m e設定為0。

• 父程序設定的鎖,子程序不繼承。

• 子程序的未決告警被清除。

• 子程序的未決訊號集設定為空集。

使f o r k失敗的兩個主要原因是:( a )系統中已經有了太多的程序(通常意味著某個方面出了問題),或者( b )該實際使用者i d的程序總數超過了系統限制。回憶表2 - 7,其中c h i l d _ m a x規定了每個實際使用者i d在任一時刻可具有的最大程序數。

f o r k有兩種用法:

(1) 一個父程序希望複製自己,使父、子程序同時執行不同的**段。這在網路服務程序中是常見的——父程序等待委託者的服務請求。當這種請求到達時,父程序呼叫f o r k,使子程序處理此請求。

父程序則繼續等待下一個服務請求。

(2) 一個程序要執行一個不同的程式。這對s h e l l是常見的情況。在這種情況下,子程序在從f o r k返回後立即呼叫e x e c。

我們從一個例子程式中可以看到fork函式的作用,子程序與父程序之間的資源共享。

#include

#include

#include

int glob = 6;

char buf = "a write to stdout\n";

int main()

else if(pid == 0)

else

return 0;}

2樓:匿名使用者

樓上正解!!

哈哈~~~

作業系統(os)學的基本上都比較低層了,大致就是在計算機硬體上上搭載一個平臺,並且給予上層介面,使上層的軟體可以操作計算機~~

作業系統存在廣泛性,從小型機到大型機使用的系統都是不同的,微機上常見的os諸如linux,mac os x,windows,dos,solaris,bsd,os/2等,一般中型機以上的就都是執行unix或者類unix系統了~~

目前top500的機子裡大多數使用的都是linux系統~~你的串號我已經記下,採納後我會幫你製作

3樓:w菜鴿

fork() 建立子程序

根據fork()的返回值可以判斷該處是在父程序還是子程序的**裡。

while((p1=fork())==-1);

是建立子程序,失敗重複,直到建立成功一個為止;

這時在建立的p1子程序裡輸出'b';

然後,同理,在建立的p2子程序裡輸出『c』

最後,父程序輸出'a'

這個程式就是用一個父程序建立了兩個子程序,分別在每個程序裡輸出一個不同的字元以作區別。

在終端看來,就是輸出了三個字元,但順序不確定。

4樓:匿名使用者

fork()是建立程序的意思

作業系統實驗第三個程序讀不懂,麻煩大神解釋下,儘量詳細點,人笨 100

5樓:大大蟲

fork呼叫的一個奇妙之處就是它僅僅被呼叫一次,卻能夠返回兩次,它可能有三種不同的返回值

1)在父程序中,fork返回新建立子程序的程序id;

2)在子程序中,fork返回0;

3)如果出現錯誤,fork返回一個負值;

你的例子中,子程序執行ls

父程序通過wait阻塞程序,直到它的個子程序結束,這個呼叫會返回該子程序的pid。如果有錯誤,返回-1,錯誤碼儲存在errno中。

計算機的作業系統是什麼意思

6樓:貓咪來了

計算機中的系統軟體你們知道嗎?

7樓:h壹知半解

操作系bai統實際上是一組du程式,它們用於統一管zhi理計算機中的各種軟dao、硬體資源,合理內地組織計算機的容工作流程,協調計算機系統的各部分之間、系統與使用者之間、使用者與使用者之間的關係。由此可見,作業系統在計算機系統之間佔有特殊重要的地位。通常,作業系統具有5個方面的功能,即 記憶體儲器管理、處理機管理、裝置管理、檔案管理和作業管理。

這也就是通常所說的作業系統的5大任務。

8樓:匿名使用者

作業系統(operating system,簡copy稱os)是管理bai和控制計算機du硬體zhi與軟體資源的計算機程式,是直接執行在「裸機dao」上的最基本的系統軟體,任何其他軟體都必須在作業系統的支援下才能執行。 作業系統是使用者和計算機的介面,同時也是計算機硬體和其他軟體的介面。作業系統的功能包括管理計算機系統的硬體、軟體及資料資源,控制程式執行,改善人機介面,為其它應用軟體提供支援,讓計算機系統所有資源最大限度地發揮作用,提供各種形式的使用者介面,使使用者有一個好的工作環境,為其它軟體的開發提供必要的服務和相應的介面等。

實際上,使用者是不用接觸作業系統的,作業系統管理著計算機硬體資源,同時按照應用程式的資源請求,分配資源,如:劃分cpu時間,記憶體空間的開闢,呼叫印表機等。

9樓:一路灰大

作業系統是計算機系統的一種系統軟體,它管理計算機系統的戲院,控制程式的執行,改善人機介面和為其他軟體提供支援。希望幫助你

10樓:匿名使用者

作業系統的例子:windows,linux,dos等

作業系統是一種計算機軟體,它的主要作用是管理計算機硬體設回備,便於人類使用.因為答物理的計算機只能理解機器指令,人類是很難使用的.作業系統隱藏了計算機硬體的細節,把複雜的硬體裝置邏輯化,簡單化,使人類易於理解.

計算機作業系統wimp什麼意思

11樓:家居搬運工

wimp是圖形介面電腦所採用的介面典範。

微軟的windows、蘋果電腦的macos,甚至其它以x window系統為基礎的作業系統,均採用wimp此一介面典範。wimp是由「視窗」(window)、「圖示」(icon)、「選單」(menu)以及「指標」(pointer)所組成的縮寫,其命名方式也指明瞭它所倚賴的四大互動元件。

fork是什麼意思 網上看到很多** 被fork 被fork 這個fork是什麼意思啊

12樓:東北人在西政

fork的意思就是分支,相當於在當前程序所執行到的位置分一個支流出來,然後,新程序與老程序都是從分叉點開始繼續執行

13樓:防爆工具

計算機程式設計中的分叉函式。返回值: 若成功呼叫一次則返回兩個值,子程序返回0,父程序返回子程序標記;否則,出錯返回-1。

14樓:千葉平龍

指的是把別人託管在github上的**複製出一個屬於自己的分支

15樓:匿名使用者

把開源專案克隆到自己遠端倉庫

16樓:匿名使用者

指的是把別人在github上託管的**複製出一個屬於自己的分支。

17樓:code每分鐘

fork 是unix/linux環境下的建立程序的函式,它所建立的程序是子程序,是父程序的拷貝,建議看看linux環境程式設計的書

18樓:匿名使用者

函式說明

一個現有程序可以呼叫fork函式建立一個新程序。由fork建立的新程序被稱為子程序(child process)。fork函式被呼叫一次但返回兩次。

兩次返回的唯一區別是子程序中返回0值而父程序中返回子程序id。

子程序是父程序的副本,它將獲得父程序資料空間、堆、棧等資源的副本。注意,子程序持有的是上述儲存空間的「副本」,這意味著父子程序間不共享這些儲存空間。

unix將複製父程序的地址空間內容給子程序,因此,子程序有了獨立的地址空間。在不同的unix (like)系統下,我們無法確定fork之後是子程序先執行還是父程序先執行,這依賴於系統的實現。所以在移植**的時候我們不應該對此作出任何的假設。

關於計算機作業系統的問題

19樓:我是百人敵

這是訊號量pv操作。

p是請求操作,v是釋放操作(使用結束後讓別人請求)。

在變數前加&是指傳地址方式,

c語言中函式引數為結構體時,一般採用傳地址方式。(偽**其實不用這麼寫)

這裡採用了同時請求左右筷子的策略。

每個哲學家吃飯前需要請求筷子,也就是

p(&fork[i]);

p(&fork[(i+1) % n]);

直接這麼寫會有死鎖。所以要用互斥變數mutex將其做成臨界區,防止同時請求。

然後,吃飯。

吃完飯,釋放筷子,讓別人請求,即:

v(&fork[i]);

v(&fork[(i+1) % n]);

20樓:小民笨笨

p(&mutex)是函式,這一句進行函式呼叫。

p(&fork[i])也是函式呼叫。&fork[i]是取fork[i]陣列的地址。

符號&是取地址符號,c++都有說明的。整個程式要放在上下文才能理解。

21樓:匿名使用者

p 跟 v 都是函式名 p(&mutext); 表示呼叫函式p,括號中的&mutext 表示引用mutext的地址。

(計算機作業系統)wait操作和signal操作什麼意思?

22樓:匿名使用者

wait操作:

sem_wait是一個函式,也是一個原子操作,它的作用是從訊號量的值減去一個「1」,但它永遠會先等待該訊號量為一個非零值才開始做減法。也就是說,如果你對一個值為2的訊號量呼叫sem_wait(),執行緒將會繼續執行,將訊號量的值將減到1。

如果對一個值為0的訊號量呼叫sem_wait(),這個函式就會原地等待直到有其它執行緒增加了這個值使它不再是0為止。如果有兩個執行緒都在sem_wait()中等待同一個訊號量變成非零值。

那麼當它被第三個執行緒增加 一個「1」時,等待執行緒中只有一個能夠對訊號量做減法並繼續執行,另一個還將處於等待狀態。sem_trywait(sem_t *sem)是函式sem_wait的非阻塞版,它直接將訊號量sem減1,同時返回錯誤**。

signal操作:

sig是傳遞給signal的唯一引數。執行了signal()呼叫後,程序只要接收到型別為sig的訊號,不管其正在執行程式的哪一部分,就立即執行func()函式。當func()函式執行結束後,控制權返回程序被中斷的那一點繼續執行。

signal()會依引數signum 指定的訊號編號來設定該訊號的處理函式。當指定的訊號到達時就會跳轉到引數handler指定的函式執行。

當一個訊號的訊號處理函式執行時,如果程序又接收到了該訊號,該訊號會自動被儲存而不會中斷訊號處理函式的執行,直到訊號處理函式執行完畢再重新呼叫相應的處理函式。但是如果在訊號處理函式執行時程序收到了其它型別的訊號,該函式的執行就會被中斷。

計算機作業系統的區別,電腦三大作業系統有何區別

簡單的說。dos是命令作業系統。windows7是圖形的,和xp一樣,滑鼠點點的操作,你開啟。開始 執行。輸入。cmd 不帶引號 那個黑乎乎的視窗就類似dos系統了。是通過輸入一條條命令的。dos是在windows系統問世之前在x86相容機上最流行的作業系統,是一個以文字模式使用者介面 cui 為基...

要學習作業系統,學習計算機作業系統需要什麼基礎

資料庫系統原理中講過死鎖,你要在那裡學到過,應該很好理解的。作業系統其實不是很難學的,關鍵就是搞清楚程序,臨界資源,等基本概念。建議用西安電子科技大學出版的那本教材,很經典的 這個 也許對你有所幫助 http www.hongen.com 建議先從最基本的入手,先學會簡單的,然後循序漸進,不要一上來...

計算機作業系統(關於判斷死鎖的題目)

先來回顧一下你的題目 設有7個簡單資源 a b c d e f g。其申請命令分別為a b c d e f g 釋放命令分別為a b c d d f g 又設系統中有p1 p2 p3三個程序,其活動分別為 p1活動 a b a b e f g e f g p2活動 b c b c d a d a p...