Linux系統編程(一)

Linux系統編程(一)

  • 一、進程和程序
  • 二、內存布局
    • 內核空間
    • 用戶空間
  • 三、進程狀態
  • 四、環境變量
  • 五、進程共享


一、進程和程序

程序:是指編譯好的二進制文件,存儲在磁盤中,不占用系統資源。

進程:是系統進行資源分配的基本單位,進程是活躍的程序,占用系統資源。在內存中執行。

兩者關系:程序運行的時候,會產生進程。

二、內存布局

在這里插入圖片描述

內存分為兩個區域,一個是內核空間,另一個就是用戶空間。

內核空間

進程陷入內核態后才能夠訪問的空間。內核中有一塊PCB進程控制塊,主要負責維護進程相關的信息。棧內存的申請和釋放都由編譯器自動完成,并且棧容量由系統預先定義的。棧從高地址到低地址增長。

用戶空間

:棧用來存放臨時創建的局部變量,如函數的參數、內部變量等。每調用一次函數,就會將參數壓入進程調用棧中,調用結束后也會被返回棧中。同時,每調用一個函數就會創建一個新的棧,所以遞歸函數的時候會導致棧溢出
文件映射段:也叫共享區,文件映射段主要包括共享內存、動態鏈接庫等共享資源,從低地址向高地址增長。
:堆用來存放動態分配的內存。堆內存由用戶申請分配和釋放,從低地址向高地址增長。
BSS:BSS段用來存放程序中未初始化的全局變量和靜態變量。
數據段:數據段用來存放程序中已初始化全局變量與靜態變量。
代碼段:代碼段用來存放程序執行代碼,也可能包含一些只讀的常量。這塊區域的大小在程序運行時就已經確定,并且為了防止代碼和常量遭到修改,代碼段被設置為只讀。

三、進程狀態

進程基本的狀態有5種。分別為初始態,就緒態,運行態,掛起態與終止態。其中初始態為進程準備階段,常與就緒態結合來看。
在這里插入圖片描述

四、環境變量

環境變量,是指在操作系統中用來指定操作系統運行環境的一些參數
例如:ls實際上也是一個程序,但是為什么我們不需要加入完整的路徑名/bin/ls呢?當我們執行的ls的時候,操作系統會現在環境變量中查找ls命令所在的目錄/bin,然后執行該目錄下的程序。

五、進程共享

fork函數

在這里插入圖片描述
父子之間的共享遵循讀時共享寫時復制的原則,使用全局變量并不能進行父子進程間的數據共享。全局變量是存在data段的,父進程修改全局變量和子進程修改全局變量是在data段的不同內存空間修改的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/384420.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/384420.shtml
英文地址,請注明出處:http://en.pswp.cn/news/384420.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux的SOCKET編程 簡單演示

轉載:http://blog.csdn.net/hguisu/article/details/7445768/ Linux的SOCKET編程詳解 1. 網絡中進程之間如何通信 進 程通信的概念最初來源于單機系統。由于每個進程都在自己的地址范圍內運行,為保證兩個相互通信的進 程之間既互不干擾又協調一致工作&a…

Unity(一)必然事件

【MonoBehaviour 類】(一)必然事件一、必然事件是什么?二、常用函數執行順序1.Awake2.Start3.update4.FixedUpdate三、Awake和start區別一、必然事件是什么? 在Unity中必然事件也稱腳本生命周期,是指在Unity腳本在喚醒…

正則匹配函數

轉載:http://blog.csdn.net/ithomer/article/details/6130806 1.int regcomp(regex_t *compiled, const char *pattern, int cflags) 這個函數把指定的規則表達式pattern編譯成一種特定的數據格式compiled,這樣可以使匹配更有效。函數regexec會使用這個數…

Linux系統編程(二)孤兒進程和僵尸進程

Linux系統編程(二)一、exec函數族1.exec函數二、孤兒進程和僵尸進程三、wait和waitpid1.wait函數2.waitpid函數一、exec函數族 exec函數使用時,改程序的用戶空間的代碼和數據會被新程序給替代,會從新程序的啟動例程開始。調用exe…

linux下c/c++實例之十socket簡單應用

轉自:http://blog.csdn.net/taiyang1987912/article/details/49738351 一、簡介 通過socket掃描本機打開的tcp端口號,模擬用戶名、密碼登錄服務器的過程、socket文件傳輸及模仿http服務器。 二、詳解 1、Linux下tcp端口掃描 (1)…

Linux系統編程(三)進程間的通信

Linux系統編程(三)進程間的通信一、為什么需要進程之間的通信(IPC)?二、管道1.概念2.特質3.原理4.局限性5.代碼2.讀入數據三、共享存儲映射注意事項父子進程通信一、為什么需要進程之間的通信(IPC&#xff…

使用mmap實現大文件的復制:單進程與多進程情況

單線程和多進程實現文件的復制(mmap方法) mmap實現大文件的復制單線程和多進程實現文件的復制(mmap方法)一、單線程實現二、多進程實現一般文件實現方法:1.讀取(fread)要復制的文件2.寫入&#…

exec 函數族

轉自:http://www.cnblogs.com/mickole/p/3187409.html linux系統編程之進程(五):exec系列函數(execl,execlp,execle,execv,execvp)使用 本節目標: exec替換進程映像exec關聯函數組(execl、execl…

Linux系統編程(四)信號

Linux系統編程(四)信號一、什么是信號?1、信號的本質2、信號來源硬件來源軟件來源二、常見信號1.可靠信號和不可靠信號2、不可靠信號主要有以下問題:3、可靠信號與不可靠信號注冊機制三、信號處理方式四、信號處理過程五、未決信號和阻塞信號…

SIGCHLD信號回收子進程

SIGCHLD信號回收子進程代碼問題注意點代碼 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/wait.h> #include <signal.h>void handler(int signo) {int status; pid_t pid;while ((pid waitpid(0, &status…

Wait waitpid

轉自&#xff1a;http://www.cnblogs.com/mickole/p/3187770.html linux系統編程之進程&#xff08;六&#xff09;&#xff1a;父進程查詢子進程的退出,wait,waitpid 本節目標&#xff1a; 僵進程SIGCHLDwaitwaitpid 一&#xff0c;僵尸進程 當一個子進程先于父進程結束運行時…

Linux系統編程(五)時序競態

時序競態產生原因改進總結產生原因 #include <cstdio> #include <stdio.h> #include <sys/time.h> #include <unistd.h> #include <signal.h> #include <stdlib.h> #include <errno.h>void catch_sigalrm(int signo) {printf("…

Linux C++ 簡單爬蟲

轉載&#xff1a;http://blog.csdn.net/orthocenterchocolate/article/details/38665937 方便易用&#xff0c;傳入URL&#xff0c;返回對應頁面的內容 [cpp] view plaincopy #include <iostream> #include <string> #include <netdb.h> #include <…

Linux系統編程(六)守護進程

Linux系統編程&#xff08;六&#xff09;守護進程一、進程組概念二、會話創建會話的條件守護進程概念守護進程模型創建守護進程一、進程組 概念 進程組&#xff0c;也稱之為作業。代表一個或多個進程的集合。每個進程都屬于一個進程組。 當父進程&#xff0c;創建子進程的時…

TCP 客戶端和服務器端

轉自&#xff1a;http://blog.csdn.net/itcastcpp/article/details/39047265 前面幾篇中實現的client每次運行只能從命令行讀取一個字符串發給服務器&#xff0c;再從服務器收回來&#xff0c;現在我們把它改成交互式的&#xff0c;不斷從終端接受用戶輸入并和server交互。 [cp…

利用多線程實現linux下C語言的聊天室程序:

轉載&#xff1a;http://www.360doc.com/content/16/0421/11/478627_552531090.shtml 利用多線程實現linux下C語言的聊天室程序&#xff1a; 客戶端代碼&#xff1a; threadsend線程負責客戶端消息的發送&#xff1b; threadrecv線程負責客戶端接受服務器端的消息。 [html] v…

Linux系統編程(七)消息隊列

Linux系統編程&#xff08;七&#xff09;消息隊列一、什么是消息隊列二、消息隊列內部原理三、實現消息隊列的收發1.發送消息隊列2.接收消息隊列四、消息隊列與命名管道的比較一、什么是消息隊列 消息隊列提供了一種從一個進程向另一個進程發送一個數據塊的方法。每個數據塊都…

基于Linux的SOCKET編程之TCP半雙工Client-Server聊天程序

轉自&#xff1a;http://blog.csdn.net/apollon_krj/article/details/53398448#0-tsina-1-64987-397232819ff9a47a7b7e80a40613cfe1 所謂半雙工通信&#xff0c;即通信雙方都可以實現接發數據&#xff0c;但是有一個限制&#xff1a;只能一方發一方收&#xff0c;之后交換收發對…

Linux系統編程(八)線程

Linux系統編程&#xff08;八&#xff09;線程一、什么是線程&#xff1f;二、Linux內核線程實現原理線程共享資源線程非共享資源線程優缺點線程控制原語一、什么是線程&#xff1f; LWP&#xff1a;light weight process 輕量級的進程&#xff0c;本質仍是進程(在Linux環境下…

智能算法(GA、DBO等)求解阻塞流水車間調度問題(BFSP)

先做一個聲明&#xff1a;文章是由我的個人公眾號中的推送直接復制粘貼而來&#xff0c;因此對智能優化算法感興趣的朋友&#xff0c;可關注我的個人公眾號&#xff1a;啟發式算法討論。我會不定期在公眾號里分享不同的智能優化算法&#xff0c;經典的&#xff0c;或者是近幾年…