国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Linux】多線程1——線程概念與線程控制

這篇具有很好參考價值的文章主要介紹了【Linux】多線程1——線程概念與線程控制。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


  • ?? 個人主頁 :超人不會飛)
  • ?? 本文收錄專欄:《Linux》
  • ?? 如果本文對您有幫助,不妨點贊、收藏、關(guān)注支持博主,我們一起進步,共同成長!

1. 線程概念

什么是線程

??理解線程需要和進程的概念緊密聯(lián)系。

  1. 線程是一個執(zhí)行分支,執(zhí)行粒度比進程更細,調(diào)度成本更低;
  2. 進程是分配系統(tǒng)資源的基本單位,線程是CPU調(diào)度的基本單位。
  3. 線程是運行在進程中的一個執(zhí)行流,本質(zhì)上是在進程的地址空間中運行,一個進程至少包含一個線程,稱為主線程。

Linux中的線程

線程是操作系統(tǒng)中的抽象概念,用于實現(xiàn)多任務(wù)并發(fā)執(zhí)行。不同的操作系統(tǒng)可以有不同的線程實現(xiàn)方法和模型。例如,在Windows操作系統(tǒng)中,與進程PCB對標(biāo)的,構(gòu)建了描述線程的數(shù)據(jù)結(jié)構(gòu) —— 線程控制塊,但這樣子設(shè)計有以下幾個缺點:

  1. 創(chuàng)建線程在Windows中開銷較大,因為它涉及到較多的內(nèi)核資源和數(shù)據(jù)結(jié)構(gòu)的分配
  2. 線程與進程無法統(tǒng)一組織起來
  3. 線程的調(diào)度效率低

Linux的設(shè)計者發(fā)現(xiàn),線程控制塊與進程控制塊(PCB)大部分描述屬性相同,且進程與其內(nèi)部創(chuàng)建的線程看到的都是同一個地址空間。因此,在Linux中,線程控制塊直接復(fù)用了PCB的代碼,也就是說,Linux底層并沒有真正的“線程”,這種復(fù)用之后的線程稱之為輕量級進程。

【Linux】多線程1——線程概念與線程控制,Linux,linux,運維,c++,操作系統(tǒng)

  • 每個輕量級進程(后面直接稱為線程)都有自己的一個編號——LWP,同一個進程中的各個線程具有相同的PID。

??那我們之前討論的進程是什么?這里都是輕量級進程的話,需要另有一個進程PCB來管理整個進程嗎?

答案是不用。事實上,在Linux中,因為每個進程都至少有一個線程,即主線程(主執(zhí)行流),這個線程的LWP和PID是相同的,因此,我們之前討論的進程PCB,實際上就是這個主線程的task_struct。

ps -aL命令查看系統(tǒng)中的輕量級進程。

測試:在一個進程中,創(chuàng)建了10個線程,并用ps -aL命令查看??梢钥吹接幸粋€主線程和10個新線程,主線程的PID和LWP相同。

【Linux】多線程1——線程概念與線程控制,Linux,linux,運維,c++,操作系統(tǒng)

  • 線程的調(diào)度成本低于進程,是因為同一個進程中的線程共享同一個地址空間,因此這些線程的調(diào)度只需要保存和更改一些上下文信息、CPU寄存器即可,如pc指針。而進程的調(diào)度需要修改較多的內(nèi)存資源,如頁表、地址空間等,而開銷更大的是修改cache緩存的數(shù)據(jù)。

    cache緩存

    CPU內(nèi)部的高速存儲器中,保存著一些頻繁訪問的指令和數(shù)據(jù),基于局部性原理,這些數(shù)據(jù)可能是未來將要被訪問的,也可能是當(dāng)前正在訪問的。這么做的目的是減少CPU與內(nèi)存的IO次數(shù),以便快速響應(yīng)CPU的請求,而不必每次都從較慢的內(nèi)存中獲取數(shù)據(jù)。不同進程的cache緩存數(shù)據(jù)是不同的,因此調(diào)度進程是需要切換這部分數(shù)據(jù),而同一個進程的不同線程的cache緩存相同。

    CPU根據(jù)PID和LWP的對比,區(qū)分當(dāng)前調(diào)度是線程級還是進程級,進而執(zhí)行對應(yīng)的調(diào)度策略。

線程的優(yōu)點

  1. 線程占用的資源比進程少很多,因此創(chuàng)建線程的開銷比創(chuàng)建進程小
  2. 線程的調(diào)度成本低于進程調(diào)度,線程切換時OS的工作量小
  3. 充分利用多處理器的可并行數(shù)量
  4. 在等待慢速I/O操作結(jié)束的同時,程序可執(zhí)行其他的計算任務(wù)
  5. 計算密集型應(yīng)用,為了能在多處理器系統(tǒng)上運行,將計算分解到多個線程中實現(xiàn)
  6. I/O密集型應(yīng)用,為了提高性能,將I/O操作重疊。線程可以同時等待不同的I/O操作。

線程的缺點

  1. 性能損失。 一個很少被外部事件阻塞的計算密集型線程往往無法與其它線程共享同一個處理器。 如果計算密集型線程的數(shù)量比可用的處理器多,那么可能會有較大的性能損失,這里的性能損失指的是增加了額外的同步和調(diào)度開銷,而可用的資源不變。 例如有10個處理器,11個線程,一對一的關(guān)系被破壞后,多出來的線程就增加了額外的調(diào)度開銷。
  2. 復(fù)雜性和錯誤難以調(diào)試。 多線程編程涉及到共享資源、并發(fā)訪問和同步等問題,這增加了程序的復(fù)雜性。
  3. 健壯性降低。 編寫多線程需要更全面更深入的考慮,在一個多線程程序里,因時間分配上的細微偏差或者因共享了不該共享的變量而造成不良影響的可能性是很大的,換句話說多線程之間是缺乏保護的。

?補充:

線程發(fā)生異常(如野指針、除零錯誤等),會導(dǎo)致線程崩潰,進而引發(fā)整個進程退出。從宏觀角度,因為線程是進程的一個執(zhí)行分支,線程干的事就是進程干的事,因此線程異常相當(dāng)于進程異常,進程就會退出。從內(nèi)核角度,線程出錯,OS發(fā)送信號給進程,而不是單發(fā)給線程。

線程的獨立資源和共享資源

進程是資源分配的基本單位,線程是調(diào)度的基本單位。一個進程中的多個線程共享線程數(shù)據(jù),當(dāng)然也有自己獨立的數(shù)據(jù)。

線程的獨立資源:

  • 寄存器中的上下文信息
  • 線程ID(在Linux中表現(xiàn)為LWP)
  • errno
  • 信號屏蔽字和未決信號集
  • 調(diào)度優(yōu)先級

線程的共享資源:

  • 進程地址空間(包括進程的數(shù)據(jù)段、代碼段等)
  • 文件描述符表
  • 每種信號的處理方式(SIG_ IGN、SIG_ DFL或者自定義的信號處理函數(shù))
  • 當(dāng)前工作目錄
  • 用戶ID和組ID

2. 線程控制

Linux的pthread庫

Liunx中,提供給用戶層進行線程控制的函數(shù)被打包在一個動態(tài)庫中 —— pthread。使用線程控制接口時,需要包含頭文件pthread.h,并在gcc/g++編譯時加上-l pthread選項確定鏈接動態(tài)庫。

/lib64目錄下找到pthread庫:

【Linux】多線程1——線程概念與線程控制,Linux,linux,運維,c++,操作系統(tǒng)

編譯時應(yīng)該添加的選項:

g++ threadTest.cc -o threadTest -l pthread # -lpthread也可以
  1. pthread_create

    功能:

    ? 創(chuàng)建一個線程

    接口:

       int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
    

    參數(shù):

    thread:線程庫中定義了一個線程ID類型phtread_t,這里的thread是一個輸出型參數(shù),函數(shù)會向其指向的空間寫入創(chuàng)建線程的ID

    attr:線程的屬性,一般設(shè)為nullptr即可

    start_routine:線程執(zhí)行的函數(shù),是一個返回值類型void*,參數(shù)類型void*的函數(shù)指針

    arg:傳入start_routine的參數(shù),使用前后一般需要類型轉(zhuǎn)換。

    返回值:

    RETURN VALUE
           On success, pthread_create() returns 0; on error, it returns an error number, and the contents of *thread are undefined.
    

??關(guān)于線程退出的問題:

同子進程退出,需要父進程回收,線程也需要被另外的線程回收。回收的原因如下:1. 一個線程退出后,對應(yīng)的資源不會被釋放,而是留存在地址空間中。一個進程能運行的線程數(shù)是有限的,如果不加以回收,可能會導(dǎo)致內(nèi)存泄漏!2. 一個線程退出后,其它線程可能需要獲取其執(zhí)行任務(wù)的結(jié)果。

  1. pthread_join

    功能:

    ? 阻塞等待一個線程

    接口:

    int pthread_join(pthread_t thread, void **retval);
    

    參數(shù):

    thread:線程ID

    retval:指向的空間中存儲的是線程返回的結(jié)果(注意類型轉(zhuǎn)換),因為線程函數(shù)的返回結(jié)果是void*類型,所以要用二級指針接收。如果不關(guān)心回收線程的結(jié)果,則設(shè)置為nullptr。

    返回值:

    RETURN VALUE
           On success, pthread_join() returns 0; on error, it returns an error number.
    
  2. pthread_exit

    線程函數(shù)中,可以直接用return退出線程并返回結(jié)果(可以被其它線程join接收)

    void *run(void *arg)
    {
        int cnt = 5;
        while (cnt--)
        {
            cout << "I am new thread" << endl;
            sleep(1);
        }
        return nullptr; //
    }
    

    也可以用pthread_exit函數(shù)。

    void pthread_exit(void *retval); //和return一樣,返回一個void*指針
    

Linux中,線程只有joinable和unjoinable兩種狀態(tài)。默認情況下,線程是joinable狀態(tài),該狀態(tài)下的線程退出后,占有資源不會被釋放,必須等待其它線程調(diào)用pthread_join回收它,釋放資源,或者進程退出,資源全部被釋放。當(dāng)然,可以通過調(diào)用pthread_detach分離線程,將線程設(shè)置為unjoinable狀態(tài),使其無需被等待回收,退出即被系統(tǒng)自動釋放資源。

  1. pthread_detach

    功能:

    ? 分離線程ID為thread的線程,使其無需被join等待。

    接口:

    int pthread_detach(pthread_t thread);
    

    返回值:

    RETURN VALUE
           On success, pthread_detach() returns 0; on error, it returns an error number.
    

線程分離可以由別的線程分離,也可以自己分離。

  1. pthread_self

    功能:

    ? 獲取當(dāng)前線程的線程ID

    接口:

     pthread_t pthread_self(void);
    

?測試

void *run(void *arg)
{
    int cnt = 10;
    while(cnt--)
    {
        cout << "I am new thread, cnt: " << cnt << endl;
        sleep(1);
    }
    pthread_exit(nullptr);
}

int main()
{
    cout << "I am main thread" << endl;

    pthread_t tid;
    pthread_create(&tid, nullptr, run, nullptr);

    int n = pthread_join(tid, nullptr);
    if (n != 0)
    {
        cout << "join new thread fail!!" << endl;
        exit(1);
    }
    cout << "join new thread success!!" << endl;
    return 0;
}

主線程創(chuàng)建新線程后,調(diào)用pthread_join會阻塞等待新線程退出。運行結(jié)果如下:

[ckf@VM-8-3-centos lesson9_thread]$ ./mythread 
I am main thread
I am new thread, cnt: 9
I am new thread, cnt: 8
I am new thread, cnt: 7
I am new thread, cnt: 6
I am new thread, cnt: 5
I am new thread, cnt: 4
I am new thread, cnt: 3
I am new thread, cnt: 2
I am new thread, cnt: 1
I am new thread, cnt: 0
join new thread success!!

可以在主線程中detach線程ID為tid的新線程,也可以在新線程中detach自己。

void *run(void *arg)
{
    //pthread_detach(pthread_self()); // 在新線程中detach自己
    int cnt = 10;
    while(cnt--)
    {
        cout << "I am new thread, cnt: " << cnt << endl;
        sleep(1);
    }
    pthread_exit(nullptr);
}

int main()
{
    cout << "I am main thread" << endl;

    pthread_t tid;
    pthread_create(&tid, nullptr, run, nullptr);

    pthread_detach(tid); // 在主線程中detach線程ID為tid的新線程
    int n = pthread_join(tid, nullptr);
    if (n != 0)
    {
        cout << "join new thread fail!!" << endl;
        exit(1);
    }
    cout << "join new thread success!!" << endl;
    return 0;
}
[ckf@VM-8-3-centos lesson9_thread]$ ./mythread 
I am main thread
join new thread fail!! #等待失敗,pthread_join無法等待已分離的線程,返回值非0

如果在新線程中detach自己,可能依然能夠join成功。要想成功detach線程,必須在join之前detach,因為調(diào)用pthread_join函數(shù)時,已經(jīng)將線程視為joinable并阻塞等待了,此后再detach是無效的。上面代碼中,如果在新線程中detach自己,由于主線程和新線程調(diào)度的先后順序不確定性,很可能線程先join再detach,此時的detach是無效的。

  1. pthread_cancel

    功能:

    ? 撤銷(終止)一個線程ID為thread的線程

    接口:

    int pthread_cancel(pthread_t thread);
    

    返回值:

    RETURN VALUE
           On success, pthread_cancel() returns 0; on error, it returns a nonzero error number.
    

    撤銷一個線程后,如果有另外的線程join該線程,那么其收到的退出結(jié)果是PTHREAD_CANCELED。

    #define PTHREAD_CANCELED ((void *) -1)
    

?測試

void *run(void *arg)
{
    while (true)
    {
        cout << "I am new thread" << endl;
        sleep(1);
    }
    pthread_exit(nullptr);
}

int main()
{
    cout << "I am main thread" << endl;

    pthread_t tid;
    pthread_create(&tid, nullptr, run, nullptr);

    sleep(3);
    pthread_cancel(tid);

    void *ret = nullptr;
    int n = pthread_join(tid, &ret);
    if (n != 0)
    {
        cout << "join new thread fail!!" << endl;
        exit(1);
    }
    if (ret == PTHREAD_CANCELED)
    {
        cout << "new thread is canceled" << endl;
    }
    cout << "join new thread success!!" << endl;

    return 0;
}
[ckf@VM-8-3-centos lesson9_thread]$ ./mythread 
I am main thread
I am new thread
I am new thread
I am new thread
new thread is canceled #新線程被撤銷了
join new thread success!!

用戶級線程

??pthread庫的線程控制接口,都不是直接操作Linux底層的輕量級進程,而是操作用戶級線程。pthread庫將底層的輕量級進程封裝成為用戶級線程,用戶看到的便是線程而不是所謂的輕量級進程。動態(tài)庫load到進程的共享區(qū)中,因此,用戶級線程的空間也是load到進程的共享區(qū)中,線程的大部分獨立資源保存在這塊空間中,包括線程棧。

??線程庫是怎么管理用戶級線程的?

先描述再組織。 創(chuàng)建類似TCB的數(shù)據(jù)結(jié)構(gòu)來描述線程,并將這些數(shù)據(jù)結(jié)構(gòu)組織為一張表,如下。

【Linux】多線程1——線程概念與線程控制,Linux,linux,運維,c++,操作系統(tǒng)

  • 前面使用接口獲取到的線程tid,其實就是該線程的用戶級頁表的首地址,只不過將其轉(zhuǎn)換成整型的格式。

    int g_val = 100;
    
    string toHex(pthread_t tid)
    {
        char buf[64];
        snprintf(buf, sizeof(buf), "0x%x", tid);
        return string(buf);
    }
    
    void *run(void *arg)
    {
        cout << toHex(pthread_self()) << endl;
        pthread_exit(nullptr);
    }
    
    int main()
    {
        pthread_t t1;
        pthread_t t2;
    
        cout << "&g_val: " << &g_val <<endl;
        pthread_create(&t1, nullptr, run, nullptr);
        pthread_create(&t2, nullptr, run, nullptr);
    
        pthread_join(t1, nullptr);
        pthread_join(t2, nullptr);
    
        return 0;
    }
    
    [ckf@VM-8-3-centos lesson9_thread]$ ./mythread 
    &g_val: 0x6020cc #全局數(shù)據(jù)區(qū)
    0x4b30f700       #共享區(qū)
    0x4ab0e700		 #共享區(qū)
    
  • 全局變量默認是所有線程共享的,開發(fā)者需要處理多線程競爭問題。有些情況下我們需要保證一個線程獨享一份數(shù)據(jù),其它線程無法訪問。這時候就要用到線程局部存儲。gcc/g++編譯環(huán)境中,可以__thread聲明一個全局變量,從而每個線程都會獨有一個該全局變量,存儲在線程局部存儲區(qū)中。

    __thread int g_val = 0; //__thread修飾全局變量,可以理解為從進程的全局變量變成線程的全局變量
    
    string toHex(pthread_t tid)
    {
        char buf[64];
        snprintf(buf, sizeof(buf), "0x%x", tid);
        return string(buf);
    }
    
    void *run(void *arg)
    {
        cout << "g_val: " << ++g_val << " " << "&g_val: " << &g_val << endl;
        pthread_exit(nullptr);
    }
    
    int main()
    {
        pthread_t t1;
        pthread_t t2;
        pthread_t t3;
    
        pthread_create(&t1, nullptr, run, nullptr);
        pthread_create(&t2, nullptr, run, nullptr);
        pthread_create(&t3, nullptr, run, nullptr);
        cout << "g_val: " << ++g_val << " " << "&g_val: " << &g_val << endl;
    
        pthread_join(t1, nullptr);
        pthread_join(t2, nullptr);
        pthread_join(t3, nullptr);
    
        return 0;
    }
    
    [ckf@VM-8-3-centos lesson9_thread]$ ./mythread #使用了線程局部存儲
    g_val: 1 &g_val: 0x7fcb7cfcb77c
    g_val: 1 &g_val: 0x7fcb7bf366fc
    g_val: 1 &g_val: 0x7fcb7b7356fc
    g_val: 1 &g_val: 0x7fcb7af346fc
    
    [ckf@VM-8-3-centos lesson9_thread]$ ./mythread #未使用線程局部存儲
    g_val: 1 &g_val: 0x6021d4
    g_val: 2 &g_val: 0x6021d4
    g_val: 3 &g_val: 0x6021d4
    g_val: 4 &g_val: 0x6021d4
    
  • 每個線程都有一個獨立的棧結(jié)構(gòu),用于存儲運行時的臨時數(shù)據(jù)和壓入函數(shù)棧幀。注意,主線程的棧就是進程地址空間中的棧。


ENDING…文章來源地址http://www.zghlxwxcb.cn/news/detail-650133.html

到了這里,關(guān)于【Linux】多線程1——線程概念與線程控制的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【Linux】多線程1——線程概念與線程控制

    【Linux】多線程1——線程概念與線程控制

    ?? 個人主頁 :超人不會飛) ?? 本文收錄專欄 :《Linux》 ?? 如果本文對您有幫助,不妨 點贊、收藏、關(guān)注 支持博主,我們一起進步,共同成長! ??理解線程需要和進程的概念緊密聯(lián)系。 線程是一個執(zhí)行分支,執(zhí)行粒度比進程更細,調(diào)度成本更低; 進程是分配系統(tǒng)資源的

    2024年02月12日
    瀏覽(47)
  • 【Linux】操作系統(tǒng)與進程的概念

    【Linux】操作系統(tǒng)與進程的概念

    目錄 馮諾依曼體系 注意 為什么CPU不直接訪問輸入或輸出設(shè)備? 跨主機間數(shù)據(jù)的傳遞 操作系統(tǒng) 管理 進程 描述進程 進程的查看和終止 ?bash 通過系統(tǒng)調(diào)用創(chuàng)建子進程 fork的辨析 ??馮·諾依曼結(jié)構(gòu)也稱普林斯頓結(jié)構(gòu),是一種 將程序指令存儲器和數(shù)據(jù)存儲器合并在一起的存儲器

    2024年01月18日
    瀏覽(21)
  • 【Linux】初步理解操作系統(tǒng)和進程概念

    【Linux】初步理解操作系統(tǒng)和進程概念

    操作系統(tǒng)是一款純正的 “搞管理” 的文件 。 那操作系統(tǒng)為什么要管理文件? “管理” 又是什么? 它是怎么管理的? 1.操作系統(tǒng)幫助用戶,管理好底層的軟硬件資源; 2.為了給用戶提供一個良好,安全的環(huán)境 即操作系統(tǒng)通過管理好底層的軟硬件資源,為用戶提供一個良好

    2024年02月15日
    瀏覽(16)
  • Linux:馮諾依曼系統(tǒng)和操作系統(tǒng)的概念

    Linux:馮諾依曼系統(tǒng)和操作系統(tǒng)的概念

    本篇主要總結(jié)的是操作系統(tǒng)的基本認知和一些概念 那么上圖表示的就是馮諾依曼體系結(jié)構(gòu),那這個體系結(jié)構(gòu)是什么?為什么要先介紹它? 截止目前來說,常見的計算機都是遵循著馮諾依曼體系組成的,可以說有了馮諾依曼體系才能讓計算機變得這么普及,才有了現(xiàn)在的互聯(lián)

    2024年02月07日
    瀏覽(31)
  • 【Linux】進程概念I(lǐng) --操作系統(tǒng)概念與馮諾依曼體系結(jié)構(gòu)

    【Linux】進程概念I(lǐng) --操作系統(tǒng)概念與馮諾依曼體系結(jié)構(gòu)

    Halo,這里是Ppeua。平時主要更新C語言,C++,數(shù)據(jù)結(jié)構(gòu)算法…感興趣就關(guān)注我吧!你定不會失望。 計算機是由兩部分組成的: 硬件+軟件 .與硬件相關(guān)的為 馮諾依曼體系結(jié)構(gòu) ,與軟件相關(guān)的為: 操作系統(tǒng) . 如今大多數(shù)計算機(筆記本,服務(wù)器等)大多數(shù)都遵守馮諾依曼體系結(jié)構(gòu).實際中

    2024年02月09日
    瀏覽(21)
  • 【Linux】馮諾依曼體系結(jié)構(gòu)和操作系統(tǒng)概念

    【Linux】馮諾依曼體系結(jié)構(gòu)和操作系統(tǒng)概念

    數(shù)學(xué)家馮·諾依曼提出了計算機制造的三個基本原則,即采用二進制邏輯、程序存儲執(zhí)行以及計算機由五個部分組成(運算器、控制器、存儲器、輸入設(shè)備、輸出設(shè)備),這套理論被稱為馮·諾依曼體系結(jié)構(gòu)。 現(xiàn)代計算機發(fā)展所遵循的基本結(jié)構(gòu)形式始終是馮·諾依曼機結(jié)構(gòu)。這

    2024年02月02日
    瀏覽(24)
  • 【Linux】馮諾伊曼體系結(jié)構(gòu)|操作系統(tǒng)概念理解

    【Linux】馮諾伊曼體系結(jié)構(gòu)|操作系統(tǒng)概念理解

    個人主頁:??在肯德基吃麻辣燙 我的gitee:Linux倉庫 個人專欄:Linux專欄 分享一句喜歡的話:熱烈的火焰,冰封在最沉默的火山深處 本文進入Linux較為晦澀的概念——馮諾依曼體系結(jié)構(gòu)和操作系統(tǒng)的理解。 馮諾依曼體系結(jié)構(gòu)是我們?nèi)粘S嬎銠C都遵守的一個整體架構(gòu),計算機

    2024年02月14日
    瀏覽(25)
  • 【Linux】馮諾依曼體系結(jié)構(gòu) && 操作系統(tǒng) && 進程概念

    【Linux】馮諾依曼體系結(jié)構(gòu) && 操作系統(tǒng) && 進程概念

    目錄 一、馮諾依曼體系結(jié)構(gòu) 二、操作系統(tǒng) ?1、概念 ?2、設(shè)計OS的目的 三、進程 ?1、基本概念 ?2、描述進程-PCB ?3、組織進程 ?4、查看進程和終止 ?5、通過系統(tǒng)調(diào)用獲取進程標(biāo)識符 ?6、通過系統(tǒng)調(diào)用創(chuàng)建進程-fork ?7、進程狀態(tài) ?8、特殊進程 ? ?8.1 僵尸進程 ? ?8.2 孤兒進

    2024年02月10日
    瀏覽(17)
  • 【Linux】操作系統(tǒng)的基本概念 {馮諾依曼體系結(jié)構(gòu),操作系統(tǒng)的基本概念,系統(tǒng)調(diào)用及用戶操作接口,shell程序}

    【Linux】操作系統(tǒng)的基本概念 {馮諾依曼體系結(jié)構(gòu),操作系統(tǒng)的基本概念,系統(tǒng)調(diào)用及用戶操作接口,shell程序}

    現(xiàn)代計算機設(shè)計大都遵守馮·諾依曼體系結(jié)構(gòu): 截至目前,我們所認識的計算機,都是由一個個的硬件組件組成 輸入單元:包括鍵盤, 鼠標(biāo),掃描儀, 磁盤,網(wǎng)卡等 存儲器: 內(nèi)存(提高數(shù)據(jù)讀寫速度,降低硬件成本) 中央處理器(CPU):含有運算器(算數(shù)運算,邏輯運算)和控

    2024年02月11日
    瀏覽(53)
  • Linux復(fù)習(xí) / 線程相關(guān)----線程概念與控制 Q&A梳理

    Linux復(fù)習(xí) / 線程相關(guān)----線程概念與控制 Q&A梳理

    本篇博客梳理關(guān)于線程相關(guān)的QA,包括了線程概念與線程的控制。若讀者也在復(fù)習(xí)這塊知識,或者正在學(xué)習(xí)這塊知識,可以通過這些QA檢測自己的知識掌握情況。此外,思維導(dǎo)圖已經(jīng)更新至我的gitee,QA之外的體系梳理還請移步思維導(dǎo)圖。 線程概念 Q:線程和進程的區(qū)別?(為

    2023年04月14日
    瀏覽(46)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包