1603, 1/81 ȸ¿ø°¡ÀÔ  ·Î±×ÀΠ 
   ÇØÅ·ÀßÇÏ°í½Í´Ù
   http://¾øÀ½
   ÇØÄ¿½ºÄ𠸸ȭÀÇ ÀÚµ¿À¸·Î ½ºÄµÇÏ´Â ÇÁ·Î±×·¥

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=8598 [º¹»ç]


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

#define NUM_THREADS 255  // 255°³ÀÇ ¾²·¹µå·Î ³ª´©¾î ó¸®

void* ping_ip(void* arg) {
    int ip = *((int*)arg);
    char str[100];

    sprintf(str, "ping -c 1 -W 1 192.168.219.%d > /dev/null", ip);

    if (system(str) == 0) {
        printf("192.168.219.%d is alive\n", ip);
    }

    return NULL;
}

int main() {
    pthread_t threads[NUM_THREADS];
    int i;
    int ip[NUM_THREADS];

    for (i = 0; i < NUM_THREADS; i++) {
        ip[i] = i;  // °¢ ¾²·¹µå¿¡ ´Ù¸¥ IP ³Ñ°ÜÁÖ±â
        pthread_create(&threads[i], NULL, ping_ip, &ip[i]);
    }

    for (i = 0; i < NUM_THREADS; i++) {
        pthread_join(threads[i], NULL);  // ¾²·¹µå Á¾·á ´ë±â
    }

    return 0;
}
================================================





ÇØÄ¿½ºÄ𠸸ȭÀÇ ±¸Å¸°¡ ¸¸µç ÀÚµ¿À¸·Î ½ºÄµÇÏ´Â ÇÁ·Î±×·¥ÀÌ ³ª¿À´Âµ¥
°Å±â¿¡¼­ "¾²·¹µå" °³³äÀ» ³Ö¾î¼­ ÇÁ·Î±×·¥À» È®ÀåÇغôÙ.



¸ÖƼ ¾²·¹µùÀº ÇϳªÀÇ ÇÁ·Î¼¼½º ³»¿¡¼­
¿©·¯ ¾²·¹µå°¡ µ¿½Ã¿¡ ½ÇÇàµÇµµ·Ï ÇÏ´Â ±â¹ýÀÌ´Ù.
¸ÖƼ ¾²·¹µùÀ» ÀÌ¿ëÇϸé CPUÀÇ ¿©·¯ Äھ È¿À²ÀûÀ¸·Î È°¿ëÇÒ ¼ö ÀÖ°í
¿©·¯ ÀÛ¾÷À» µ¿½Ã¿¡ ó¸®ÇÒ ¼ö ÀÖ´Ù.
À̴ ƯÈ÷ I/O ÀÛ¾÷, º´·Ä ó¸®, ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹Ö,
°ÔÀÓ °³¹ß µî¿¡¼­ ¸Å¿ì À¯¿ëÇÏ°Ô »ç¿ëµÈ´Ù.



1. ±âº» °³³ä
ÇÁ·Î¼¼½º(Process): ½ÇÇà ÁßÀÎ ÇÁ·Î±×·¥.
°¢ ÇÁ·Î¼¼½º´Â °íÀ¯ÇÑ ¸Þ¸ð¸® °ø°£À» °¡Áö¸ç µ¶¸³ÀûÀ¸·Î ½ÇÇàµÊ.

¾²·¹µå(Thread): ÇÁ·Î¼¼½º ³»¿¡¼­ ½ÇÇàµÇ´Â ÀÛÀº ÀÛ¾÷ ´ÜÀ§.
ÇϳªÀÇ ÇÁ·Î¼¼½º´Â ¿©·¯ °³ÀÇ ½º·¹µå¸¦ °¡Áú ¼ö ÀÖ´Ù.
°¢ ½º·¹µå´Â ÀÚ¿øÀÇ ÀϺθ¦ °øÀ¯ÇÏÁö¸¸, µ¶¸³ÀûÀ¸·Î ½ÇÇàµÈ´Ù.



2. ¸ÖƼ ¾²·¹µùÀÇ Çʿ伺
¸ÖƼ ¾²·¹µùÀº ´ÜÀÏ ¾²·¹µå·Î ½ÇÇàÇÏ´Â °Íº¸´Ù ¿©·¯ ÀÛ¾÷À» µ¿½Ã¿¡ ÇÒ ¼ö ÀÖ¾î
È¿À²ÀûÀÌ°í ¿¹¸¦ µé¾î »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º(UI) ÇÁ·Î±×·¥¿¡¼­´Â
UI¸¦ ¾÷µ¥ÀÌÆ®ÇÏ´Â ¾²·¹µå¿Í ÆÄÀÏÀ» ÀÐ°í ¾²´Â ÀÛ¾÷À» ´Ù¸¥ ¾²·¹µå¿¡¼­ ó¸®Çϸé
ÇÁ·Î±×·¥ÀÌ ¸ØÃßÁö ¾Ê°í µ¿½Ã¿¡ ¿©·¯ ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Ù.

¼­¹ö ÇÁ·Î±×·¥¿¡¼­ ´Ù¼öÀÇ Å¬¶óÀ̾ðÆ® ¿äûÀ» ó¸®ÇÒ ¶§
¿©·¯ ½º·¹µå¸¦ »ç¿ëÇÏ¸é °¢ Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀ» µ¿½Ã¿¡ ó¸®ÇÒ ¼ö ÀÖ´Ù.



3. ¸ÖƼ½º·¹µù ÀåÁ¡
È¿À²ÀûÀÎ ¸®¼Ò½º È°¿ë: µÇ¸ç ¸ÖƼÄÚ¾î CPU¿¡¼­
°¢ ½º·¹µå¸¦ ¿©·¯ Äھ¼­ ½ÇÇàÇÏ¸é ¼º´ÉÀÌ ±Ø´ëÈ­°¡ µÈ´Ù.

ÀÀ´ä¼º Çâ»ó: ¿©·¯ ÀÛ¾÷À» µ¿½Ã¿¡ ó¸®ÇÒ ¼ö À־
ÇÁ·Î±×·¥ÀÌ ´õ ºü¸£°í È¿À²ÀûÀ¸·Î µ¿ÀÛÇÑ´Ù.

ºñµ¿±â ó¸®: ¿©·¯ I/O ÀÛ¾÷À» µ¿½Ã¿¡ ó¸®ÇÒ ¼ö ÀÖ°í
³×Æ®¿öÅ© ¿äûÀ̳ª ÆÄÀÏ ÀÔÃâ·Â°ú °°Àº ÀÛ¾÷À» ºü¸£°Ô ó¸®ÇÒ ¼ö ÀÖ´Ù.



4. ¸ÖƼ ¾²·¹µù ´ÜÁ¡
µ¿±âÈ­ ¹®Á¦: ¿©·¯ ¾²·¹µå°¡ µ¿ÀÏÇÑ ÀÚ¿øÀ» °øÀ¯ÇÒ ¶§,
¼­·Î °£¼·Çϰųª µ¥ÀÌÅ͸¦ µ¤¾î¾µ ¼ö ÀÖ´Ù.
À̸¦ ÇØ°áÇÏ·Á¸é ¹ÂÅؽº(Mutex)³ª ¼¼¸¶Æ÷¾î(Semaphore)°°Àº
µ¿±âÈ­ ±â¹ýÀ» »ç¿ëÇØ¾ß ÇÑ´Ù.

º¹À⼺: ¿©·¯ ½º·¹µå°¡ µ¿½Ã¿¡ ½ÇÇàµÇ¸é
ÄÚµåÀÇ º¹Àâµµ°¡ Áõ°¡ÇÏ°í ¹ö±×¸¦ ã±â ¾î·Á¿ï ¼ö ÀÖ´Ù.



5. C ¾ð¾î¿¡¼­ ¸ÖƼ½º·¹µù »ç¿ë
C ¾ð¾î¿¡¼­ ¸ÖƼ¾²·¹µùÀ» ±¸ÇöÇÏ·Á¸é POSIX threads (pthread) ¶óÀ̺귯¸®¸¦ »ç¿ëÇÔ.
ÀÌ ¶óÀ̺귯¸®´Â ¾²·¹µå¸¦ »ý¼ºÇÏ°í °ü¸®ÇÏ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù.



6. pthread ¿¹½Ã
C¿¡¼­ ¸ÖƼ ¾²·¹µùÀ» »ç¿ëÇÏ·Á¸é pthread ¶óÀ̺귯¸®¸¦ È°¿ëÇÑ´Ù.
¾Æ·¡´Â °£´ÜÇÑ ¸ÖƼ½º·¹µù ¿¹Á¦ÀÌ´Ù.



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

// ¾²·¹µå°¡ ½ÇÇàÇÒ ÇÔ¼ö
void* my_thread_function(void* arg) {
    int id = *((int*)arg);  // ¾²·¹µå ID
    printf("Thread %d is running\n", id);
    return NULL;
}

int main() {
    pthread_t threads[5];  // 5°³ÀÇ ¾²·¹µå »ý¼º
    int thread_ids[5];
    
    // ¾²·¹µå »ý¼º
    for (int i = 0; i < 5; i++) {
        thread_ids[i] = i;  // °¢ ¾²·¹µå¿¡ ID ÇÒ´ç
        if (pthread_create(&threads[i], NULL, my_thread_function, &thread_ids[i]) != 0) {
            perror("Thread creation failed");
            return 1;
        }
    }

    // ¾²·¹µå Á¾·á ´ë±â
    for (int i = 0; i < 5; i++) {
        pthread_join(threads[i], NULL);  // °¢ ¾²·¹µå°¡ Á¾·áµÉ ¶§±îÁö ±â´Ù¸²
    }

    printf("All threads finished\n");
    return 0;
}
============================================



¹ÂÅؽº ¿¹½Ã
============================================
#include <stdio.h>
#include <pthread.h>

pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;

void* my_thread_function(void* arg) {
    pthread_mutex_lock(&lock);  // ¹ÂÅؽº Àá±Ý

    // ÀÓ°è ±¸¿ª (°øÀ¯ ÀÚ¿ø¿¡ Á¢±Ù)
    printf("Thread is accessing shared resource\n");

    pthread_mutex_unlock(&lock);  // ¹ÂÅؽº Àá±Ý ÇØÁ¦
    return NULL;
}

int main() {
    pthread_t threads[5];
    
    // 5°³ÀÇ ¾²·¹µå »ý¼º
    for (int i = 0; i < 5; i++) {
        if (pthread_create(&threads[i], NULL, my_thread_function, NULL) != 0) {
            perror("Thread creation failed");
            return 1;
        }
    }

    // ¾²·¹µå Á¾·á ´ë±â
    for (int i = 0; i < 5; i++) {
        pthread_join(threads[i], NULL);
    }

    printf("All threads finished\n");
    return 0;
}
=======================================

¹ÂÅؽº´Â ÇÑ ¹ø¿¡ ÇϳªÀÇ ½º·¹µå¸¸ °øÀ¯ ÀÚ¿ø¿¡ Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï º¸ÀåÇÑ´Ù.

pthread_mutex_lock: ¹ÂÅؽº¸¦ Àá±Ý.
pthread_mutex_unlock: ¹ÂÅؽº¸¦ Àá±Ý ÇØÁ¦.











Âü°í¹®Çå : Operating System Concepts (10th Edition)

  Hit : 325     Date : 2025/02/18 04:27



    
     [°øÁö] °­Á¸¦ ¿Ã¸®½Ç ¶§´Â ¸»¸Ó¸®¸¦ ´Þ¾ÆÁÖ¼¼¿ä^¤Ñ^ [29] ¸Û¸Û 02/27 19883
  ÇØÄ¿½ºÄ𠸸ȭÀÇ ÀÚµ¿À¸·Î ½ºÄµÇÏ´Â ÇÁ·Î±×·¥     ÇØÅ·ÀßÇÏ°í½Í´Ù
02/18 324
1601   ½Ã½ºÅÛ ÄÝ ÃßÀû È®ÀåÆÇ[2]     ÇØÅ·ÀßÇÏ°í½Í´Ù
01/19 502
1600   °£´ÜÇÑ ½Ã½ºÅÛ ÄÝ ÃßÀû ÇÁ·Î±×·¥ ¸¸µé±â     ÇØÅ·ÀßÇÏ°í½Í´Ù
01/18 494
1599   [overthewire.org] - leviathan1     ÇØÅ·ÀßÇÏ°í½Í´Ù
01/14 798
1598   [overthewire.org] - leviathan0     ÇØÅ·ÀßÇÏ°í½Í´Ù
01/14 529
1597   [Write Up] Crypto Cat's CTF 2024 - BabyFlow     ÇØÅ·ÀßÇÏ°í½Í´Ù
12/29 548
1596   [pwnable.kr] bof     ÇØÅ·ÀßÇÏ°í½Í´Ù
12/25 534
1595   [pwnable.kr] Shellshock[1]     ÇØÅ·ÀßÇÏ°í½Í´Ù
11/23 649
1594   ShellshockÀÇ ±âº» ¿ä¾à     ÇØÅ·ÀßÇÏ°í½Í´Ù
11/23 627
1593   [pwnable.kr] fd     ÇØÅ·ÀßÇÏ°í½Í´Ù
11/23 631
1592   VPNÀÌ ¿¬°áµÇ¾ú´Ù°¡ µµÁß¿¡ ²¨µµ À¥ ºê¶ó¿ìÀú»ó¿¡¼­ À¯ÁöµÇ´Â ÀÌÀ¯     ÇØÅ·ÀßÇÏ°í½Í´Ù
11/22 585
1591   ÇØÄ¿µéÀÌ ÇØÅ·½Ã »ç¿ëÇÏ´Â µð·ºÅ丮 °ø°£[1]     ÇØÅ·ÀßÇÏ°í½Í´Ù
11/22 667
1590   Keyboard Hooking -part2 - (Python3 ver)     ÇØÅ·ÀßÇÏ°í½Í´Ù
11/20 616
1589   [Windows API] Keyboard Hooking     ÇØÅ·ÀßÇÏ°í½Í´Ù
11/20 440
1588   [pwnable.kr] cmd1 °ø·«     ÇØÅ·ÀßÇÏ°í½Í´Ù
10/23 600
1587   netdiscover ÆÄÀ̽ãÀ¸·Î ±¸ÇöÇϱ⠠   ÇØÅ·ÀßÇÏ°í½Í´Ù
08/13 829
1586   ÆÄÀ̽ãÀ» ÀÌ¿ëÇÑ ½ÉÇà À¥ Å©·Ñ·¯     ÇØÅ·ÀßÇÏ°í½Í´Ù
08/13 703
1585   ÆÄÀ̽ã random¸ðµâÀ» ÀÌ¿ëÇÑ ¼ýÀÚ¸ÂÃ߱⠰ÔÀÓ ±¸Çö     ÇØÅ·ÀßÇÏ°í½Í´Ù
05/30 1277
1584   ÆÄÀ̽ã äÆà ÇÁ·Î±×·¥ ±¸Çö     ÇØÅ·ÀßÇÏ°í½Í´Ù
05/28 1204
1 [2][3][4][5][6][7][8][9][10]..[81]

Copyright 1999-2025 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org