Process ์™€ Thread

Process

โœ… ํ”„๋กœ์„ธ์Šค๋ž€?

  • ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์˜๋ฏธํ•จ.

  • ์šด์˜์ฒด์ œ์—์„œ ํ•˜๋‚˜์˜ ๋…๋ฆฝ์ ์ธ ์ž‘์—… ๋‹จ์œ„๋กœ ๊ด€๋ฆฌ๋จ.

  • ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋…๋ฆฝ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ (์ฝ”๋“œ, ๋ฐ์ดํ„ฐ, ํž™, ์Šคํƒ) ์„ ๊ฐ€์ง.

  • CPU ์Šค์ผ€์ค„๋ง์„ ๋ฐ›์•„ ์‹คํ–‰๋จ.

โœ… ํ”„๋กœ์„ธ์Šค์˜ ํŠน์ง•

  1. ๋…๋ฆฝ๋œ ์‹คํ–‰ ํ™˜๊ฒฝ

    1. ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์™€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š์Œ.

    2. ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Œ.

  2. ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค ์ง€์›

    1. ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์„œ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Œ.

    2. ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ๋ณ„๋„์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•จ.

  3. ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ํ•„์š”

    1. ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์ „ํ™˜ ์‹œ OS ๊ฐ€ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ , ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณต์›ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•จ.

    2. ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋น„์šฉ์ด ํฌ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์ „ํ™˜์€ ๋น„๊ต์  ๋А๋ฆผ.

  4. IPC(Inter-Process Communication, ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ ) ํ•„์š”

    1. ํ”„๋กœ์„ธ์Šค๋Š” ์„œ๋กœ ๋…๋ฆฝ์ ์ด๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋ ค๋ฉด, ํŒŒ์ดํ”„, ๋ฉ”์‹œ์ง€, ํ, ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ, ์†Œ์ผ“ ๊ฐ™์€ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•จ.

Thread

โœ… ์“ฐ๋ ˆ๋“œ๋ž€?

  • ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„

  • ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ.

  • ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„(์ฝ”๋“œ, ๋ฐ์ดํ„ฐ, ํž™) ์„ ๊ณต์œ  ํ•˜์ง€๋งŒ, ๊ฐ ์“ฐ๋ ˆ๋“œ๋Š” ๋…๋ฆฝ์ ์ธ ์Šคํƒ๊ณผ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๊ฐ€์ง.

โœ…์“ฐ๋ ˆ๋“œ์˜ ํŠน์ง•

  1. ๊ฒฝ๋Ÿ‰(Lightweight) ํ”„๋กœ์„ธ์Šค

  • ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ์ ์€ ์ž์›์„ ์‚ฌ์šฉํ•จ.

  • ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋น„์šฉ์ด ์ ์Œ.

  1. ๋ฉ”๋ชจ๋ฆฌ ๊ณต์œ 

  • ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ์“ฐ๋ ˆ๋“œ๋Š” ๋™์ผํ•œ ํž™๊ณผ ๋ฐ์ดํ„ฐ ์˜์—ญ์„ ๊ณต์œ ํ•จ.

  • ๋”ฐ๋ผ์„œ ์“ฐ๋ ˆ๋“œ ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ณต์œ ๊ฐ€ ์‰ฌ์›€.

  • ํ•˜์ง€๋งŒ, ๋™๊ธฐํ™” ์ด์Šˆ(๋ ˆ์ด์Šค ์ปจ๋””์…˜, ๋ฐ๋“œ๋ฝ ๋“ฑ) ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ.

  1. ๋น ๋ฅธ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ

  • ์“ฐ๋ ˆ๋“œ๋Š” ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์‹คํ–‰๋˜๋ฏ€๋กœ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์ „ํ™˜๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ ๊ฐ€๋Šฅ.

  1. ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ ์ง€์›

  • ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ•˜์—ฌ ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ.

  • ๋‹ค๋งŒ, ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋”ฉ ํ™˜๊ฒฝ์—์„œ๋Š” ๋™๊ธฐํ™” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œ -> Mutex(๋ฎคํ…์Šค), Semaphore(์„ธ๋งˆํฌ์–ด), Lock ๋“ฑ์„ ์ด์šฉํ•œ ๋™๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•จ.


ํ”„๋กœ์„ธ์Šค์™€ ์“ฐ๋ ˆ๋“œ ๋™์ž‘ ๋ฐฉ์‹

1. ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ๋ฐฉ์‹

์šด์˜์ฒด์ œ์—์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์€ fork() ์‹œ์Šคํ…œ ์ฝœ์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ž„.

#include <stdio.h>
#include <unistd.h>

int main() {
    printf("Before fork\n");
    
    pid_t pid = fork(); // ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ 
    
    if(pid == 0){
        printf("Child Process: PID = %d\n", getpid());
    } else {
        printf("Parent Process: PID = %d\n", getpid());
    }
    
    return 0;
}

โœ” fork()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒˆ๋กœ์šด ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. โœ” ๋ถ€๋ชจ์™€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋จ.

2. ์“ฐ๋ ˆ๋“œ ์ƒ์„ฑ ๋ฐฉ์‹(C, POSIX Threads)

๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ์„ ๊ตฌํ˜„ํ•  ๋•Œ pthread ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

#include <stdio.h>
#include <pthread.h>

void *thread_function(void *arg) {
    printf("Hello from thread!\n");
    return NULL;
}

int main(){
    pthread_t thread;
    pthread_create(&thread, NULL, thread_function. NULL);
    pthread_join(thread, NULL);
    
    printf("Main thread finished.\n");
    return 0;
}

pthread_create() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•จ.

pthread_join() ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆผ.

Last updated

Was this helpful?