최근 인스타 릴스에서 파이썬 GLI를 보고 프로세스와 스레드에 궁금증이 생겨서 정리해 보았습니다.
정리해 보면서 느낀 점은 그동안 너무 대충 조사하고 공부했다는 생각이 들었고,
이번에 공부해 보면서 컴퓨터 용어들과 컴퓨터에 대해 조금 더 심도 있게 이해할 수 있게 되었습니다.
1. 프로세스
1-1. 프로그램과 프로세스의 차이
우선 프로세스를 설명하기 전에 프로그램과 프로세스의 개념 정리부터 해보도록 하겠습니다.
프로그램 | 프로세스 |
실행하지 않은 프로그램 | 실행 중인 프로그램 |
장기 기억 장치(SSD, HDD)에 들어가 있으나 메모리(RAM)에는 없음. | 메모리에 들어있으며 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태. |
통용적으로 프로그램과 프로세스는 같이 쓰이기도 합니다.
그리고 사실 그리 다른 개념도 아니라고 생각합니다.
그러나 분명히 다른 개념이기도 합니다.
이 둘의 차이를 예를 들어 설명하자면
프로그램은 책장에 있는 책이며,
프로세스는 현재 읽히고 있는 책입니다.
즉, 프로세스는 진행이라고 생각하시면 편합니다.
1-2. 프로세스의 구조
프로세스는 크게 4가지 메모리 영역으로 이루어져 있습니다.
STACK
- 지역 변수와 매개 변수를 저장하는 영역. 이곳은 함수가 선언되면 할당되며 끝나면 해제됨. 할당과 해제를 반복하며 크기가 동적으로 변함. 이 영역을 초과할 때 발생하는 것이 stack overflow 에러임.
STACK 내부에선 높은 메모리에서 낮은 메모리로 정보를 저장함.
이유 : 사진 상에서 STACK과 HEAP의 공간은 분리되어있지 않은 공간입니다. 고로 메모리 영역에서 두 영역 간의 충돌을 방지하기 위해 STACK은 높은 메모리에서 낮은 메모리로, HEAP은 낮은 메모리에서 높은 메모리로 저장하는 형식입니다.
여기서 높고 낮음은 예를 들어 array에서 index가 낮은 게 낮은 메모리, 높은 게 높은 메모리라고 보시면 됩니다.
HEAP
- 동적 할당하는 영역. 메모리가 낮은 주소에서 높은 주소로 할당되며, 직접 할당, 해제해야 함. STACK과 같은 영역을 공유. 여기서도 Heap overflow가 발생할 수 있으며 이는 STACK과 같이 할당된 모리의 크기를 초과하는 데이터를 저장하려 할 경우 발생함. malloc, calloc, new와 같은 함수들이 동적 할당의 예시.
DATA
- 코드가 실행될 때 사용하는 전역 변수 같은 데이터들이 있음. 종류는 .data / .rodata / .bss 로 나뉨.
- .data : 전역 변수, static 변수(함수 호출이 끝나도 사라지지 않는 변수)
- .bss : 초기값없는 전역 변수, static 변수
- .rodata (read only data section) : 읽기 전용 data, 주로 상수, 상수형 문자열 등이 들어감. (변경 X)
.data와 .bss는 매우 비슷합니다. 그러나 차이점은 전역 변수들이 초기화 전에 .bss에 있고 main 함수가 실행되기 전, 모두 0으로 초기화되어 data 영역으로 들어갑니다.
.bss가 필요한 이유 : 여러 프로그램을 다룰 때 메모리 경량화를 위해 사용.
TEXT/CODE
- 말 그대로 코드들이 CPU가 해석 가능한 기계어 형태로 저장되어 있는 영역.
일반적으로 읽기 전용으로 설정되어 있어 실행 중 코드가 변하지 않음.
1-3. 프로세스의 상태(State)
스케줄러(Scheduler)
- 스케줄러는 운영 체제에서 프로세스나 스레드의 실행 순서를 관리하고 결정하는 소프트웨어 컴포넌트입니다. 스케줄러는 CPU 자원을 효율적으로 분배하기 위해 다양한 정책을 사용하여 프로세스와 스레드의 실행을 결정합니다.
스케줄링(Scheduling)
- 스케줄러가 어떤 순서로 작업을 실행할지 결정하는 과정입니다. 이때 스케줄링의 목표는 공정하고 효율적인 분배이며 작업량을 최대로 늘리는 것입니다.
이 과정은 여러 알고리즘 방식으로 작동합니다.
FCFS(First Come, First Served), SJF(Shortest Job First), RR(Round Robin), Priority Scheduling, Multilevel Queue Scheduling 등
Created (생성)
- 사용자가 요청한 작업이 *커널에 등록. PCB(Process Control Block)이 만들어져 프로세스가 생성된 상태.
커널(Kernel)
- 커널은 알맹이, 핵심이란 뜻.
운영체제의 핵심으로 컴퓨터 자원을 관리하는 역할을 수행.
하드웨어와 응용 프로그램 사이에서 인터페이스를 제공하여 응용 프로그램이 하드웨어에서부터 오는 자원을 관리하고 사용할 수 있게 함.
소프트웨어로부터 요청 (System Call)을 컴퓨터에 있는 하드웨어(CPU, 메모리)가 처리할 수 있도록 변환하는 역할.
생긴 이유로는 응용 프로그램이 직접 하드웨어 자원을 조작하면 무질서해질 가능성이 크기 때문에 커널을 이용해 접근을 제한하여 자원을 보호함. 예를 들면 교통에서의 교통경찰과도 같은 역할임.
- Created -> Ready : 스케줄러가 메모리 공간 검사 후 충분한 공간이 있으면 메모리를 할당해 준비 상태로 바꿈.
- Created -> Suspended Ready : 메모리 공간 검사 후 충분한 공간이 없으면 할당하지 않고 보류 상태로 바꿈.
Ready (준비)
- CPU를 할당받기 위해 기다리고 있는 상태. CPU가 주어지면 바로 실행됨.
- Ready -> Running (dispatch) : CPU를 할당받고 실행으로 바뀐 상태
- Ready -> Suspended Ready : 준비 상태였다가 메모리를 뺏긴 상태
Running (실행)
- CPU를 할당받아 실행 중인 상태
- Running -> Ready (Timeout) : CPU를 받아 실행하다가 시간 할당량을 소진하여 뺏긴 상태
- Running -> Blocked : 실행 상태의 프로세스에 입출력이 필요하여 시스템 호출 후 입출력 처리 종료를 기다리는 상태. 이때 CPU는 Ready 상태의 프로세스 하나를 선택해 실행한다.
Blocked (대기)
- 프로세스가 실행되다가 입출력 처리를 요청하거나, 바로 확보될 수 없는 자원을 요청하면 CPU를 양도하고 완료를 기다린다.
- Blocked -> Ready : 입출력 처리가 완료되거나 요청한 일이 완료되어 CPU 할당을 기다리는 상태
- Blocked -> Suspended Ready : 완료되었으나 메모리 공간이 충분치 않아 여유 공간 확보를 위해 메모리를 뺏긴 상태.
Terminated (종료)
- 프로세스 종료 후 잠시 거치는 상태
- 모든 자원 회수 후 PCB 삭제
Suspended Ready (보류)
- 생성된 프로세스가 바로 메모리를 받지 못할 때, 혹은 Ready, Running 상태에서 메모리를 잃게 될 때의 상태
- 충분한 메모리 공간 확보를 위해 Ready 상태의 프로세스를 보류시키는 경우
- Suspended Ready -> Ready : 다시 메모리를 받은 경우
Suspended Blocked (일시 정지)
- Blocked 상태일 때 메모리 공간을 잃은 상태
- Blocked -> Suspended Blocked : 메모리 공간 확보를 위해 메모리를 잃은 상태, Ready 상태의 프로세스가 아예 없는 경우에도 발생함.
- Suspended Blocked -> Blocked : 메모리가 확보되어 대기가 된 경우
- Suspended Blocked -> Suspended Ready : 입출력이나 기다리던 사건이 종료된 경우. 메모리는 할당받지 못함.
1-4. PCB(Process Control Block) 설명
PCB를 간단히 설명하면 프로세스의 상태와 필요한 값들을 저장해 두는 곳입니다.
- Pointer : 프로세스의 현재 위치를 저장하는 포인터 정보
- Process state : 프로세스의 각 상태 - New, ready, running 등
- Process ID : 각 프로세스를 고유하게 식별하는 ID
- Program Counter : 다음에 실행될 명령어의 주소
- Reigsters : 프로세스가 실행 중 사용하던 CPU 레지스터 값과 상태를 저장
- Memory Limits : 운영 체제에서 사용하는 메모리 관리 시스템에 대한 정보
- List of open file : 프로세스가 현재 열고 있는 파일 목록
레지스터
- 레지스터는 메모리의 축소판이라고 생각하면 됨.
차이점은 메모리는 CPU 외부에 있으나 레지스터는 CPU 내부에 있으며 메모리보다 상대적으로 빠르며 용량이 수십~수백 바이트 크기로 매우 작고, 연산용 데이터의 임시 저장을 하는 역할임.
주요 역할
- 데이터 임시 저장 - 연산에 필요한 데이터를 임시 저장
- 명령어 저장 - 실행할 명령어와 주소를 저장
- 중간 결과 저장 - 연산 중 생성된 결과를 RAM으로 보내기 전에 저
1-4. 프로세스의 자원 공유
기본적으로 각 프로세스는 독립적인 메모리 주소 공간에서 실행되기 때문에 직접적으로 접근할 수 없습니다. 하지만 대부분의 프로그램에서는 다른 프로그램과 정보를 주고받는 경우가 많습니다.
예를 들어, 데이터베이스 서버와 웹 서버가 데이터를 주고 받는 상황에서 이를 볼 수 있습니다.
그리고 이런 관점에서 프로세스는 크게 두 가지로 나눌 수 있습니다.
- Independent 프로세스 : 다른 프로세스와 메모리를 공유하지 않고 독립적으로 실행되는 프로세스
- Cooperating 프로세스 : 다른 프로세스와 상호작용하며 영향을 주고 받는 프로세스
여기서 Cooperating 프로세스들이 어떻게 자원 공유를 하느냐를 IPC(Inter Process Communication)이라고 합니다.
IPC에서는 자원 공유 방식으로 Message Passing과 Shared Memory가 있습니다.
Message Passing
Message Passing은 프로세스 A에서 커널에 메시지를 보내고, 커널에서 메시지를 다시 프로세스 B로 보내는 방식입니다.
그리고 몇 가지 기법들이 존재합니다.
1. Direct Communication
운영체제가 직접 도와주는 기법. 커널이 직접 개입한다.
통신을 원하는 두 프로세스가 communication link를 생성한 후 send()와 receive() 시스템 콜을 이용해 메시지를 주고받는 방식.
(a)의 경우에는 A가 커널에 메시지(m)를 보내고 B도 커널에 메시지를 보내는 경우입니다.
이와 다른 경우로는 A가 커널에 메시지(m)을 보내고, 커널이 B에게 메세지를 보내는 경우도 있습니다.
2. Indirect Communication
Direct와 Indirect 방식은 근본적으로 비슷하나 차이점은 커널이 직접적으로 개입하느냐입니다. Indirect에서는 커널에 Mailbox라는 임의의 공간을 만들어 메시지를 넣고 B가 Mailbox에서 메시지를 꺼내갑니다. 이때 커널은 간접적으로 전달할 뿐, 직접적으로 전달하지는 않습니다.
이때 Mailbox는 고유의 id가 있어 이를 공유하는 프로세스끼리만 서로 통신할 수 있습니다.
만일 프로세스 A, B, C가 Indirect Communication으로 자원 공유를 하는 경우, A가 메세지를 보냈다면 B와 C 중 누가 받게 될까요?
이런 경우에는 각각의 프로세스에게 따로 communication link를 생성하는 방법과, 링크에 대한 receive 연산을 매 시점 하나의 프로세스만 수행할 수 있도록 하는 방법이 있습니다. 혹은 시스템의 메세지 수신자를 임의로 결정해 누가 메세지를 받았는지 송신자에게 통신하는 방법이 사용될 수 있습니다.
그리고 Message Passing 방식은 커널을 거치므로 overhead(비용)이 상대적으로 큽니다.
Shared Memory
Shared Memory는 프로세스 A와 B가 자원 공유를 위해 메모리 일부를 공유하여 사용하는 방식입니다.
이는 A와 B가 공유 메모리 공간을 만들어 중간 과정을 거치지 않아 overhead가 적습니다. 사진에는 나와있지 않으나 shared memory를 사용할 때도 처음에는 커널에게 shared memory 사용을 알려야 한다고 합니다.
그리고 동기화 문제가 발생할 수 있습니다.
2. 스레드
2-1. 스레드란?
스레드를 이해하기 위해서는 우선 스레드가 만들어진 이유에 대해서 알아야 합니다.
이는 후에 설명할 프로세스와 스레드의 동시 실행과도 연관되어 있는 내용이기 때문에 가볍게만 다루겠습니다.
스레드가 만들어진 이유
1. 자원 낭비
과거에는 하나의 프로세스만을 실행하는 단일 프로세스 방식이 일반적이었습니다. 그러나 이 방식에서는 자원 낭비와 효율성이 낮았는데요. 예를 들어, 실행 중인 프로세스가 I/O 작업(파일 읽기/쓰기, 네트워크 통신 등)을 기다리는 동안, CPU는 놀고 있게 됩니다.
2. Context Switching 비용
이뿐만 아닌 Context Switching의 문제도 있었습니다. 이 또한 후에 다룰 내용이기 때문에 간략하게 설명하자면 하나의 프로세스가 종료되고, 다른 프로세스로 전환될 때마다 현재 실행 중인 프로세스의 상태를 저장하고, 새로 실행될 프로세스의 상태를 로드하는 작업이 필요합니다. 이런 작업에서 전환 비용이 발생하게 됩니다.
이런 문제를 해결하기 위해 스레드가 도입되었습니다.
스레드를 도입함으로써, 하나의 프로세스에서 여러 개의 스레드가 동시에 실행하게 되며 I/O 작업을 한 스레드가 맡는다고 하여도 다른 스레드가 일을 할 수 있기 때문에 보다 효율적으로 CPU 자원을 활용할 수 있게 되었습니다.
고로 스레드는 프로세스를 더 효율적으로 쓸 수 있도록 하는 것이죠.
예를 들자면, 프로세스는 몸이고 스레드는 팔이라고 할 수 있습니다.
즉, 프로세스는 독립적인 단위로서 마치 몸이 자아를 가지고 활동한다고 보면 됩니다. 실행 흐름이라고도 합니다.
스레드는 몸을 공유하면서 독립적으로 움직이는 팔과 비슷하기에 예로 들었습니다.
2-1-2. 스레드와 프로세스의 차이
사실 이 부분은 전 내용에 넣어도 되지만 개인적으로 가장 중요하다 생각하여 따로 빼놓고 설명하겠습니다.
아까 스레드는 하나의 프로세스 안에서 여러 개가 존재한다라고 했습니다.
그러면 스레드는 프로세스의 무슨 정보를 가지며, 어떻게 교환에 있어서 더 효율적일까요?
이 내용도 후에 나올 Thread Context Switching과 연관되어 있습니다.
아까 프로세스의 4가지 영역을 Stack, Heap, Data, Text/Code라고 말했습니다.
그리고 Thread는 이것들 중 Stack만을 지니며 다른 것은 공유합니다.
고로 프로세스의 교환과는 다르게 Stack은 더 적은 overhead로 교환할 수 있는 것입니다.
그리고 이 Stack은 해당 스레드의 함수 호출, 지역 변수, 반환 주소 등을 저장합니다.
고로 Stack은 하나의 실행 흐름인 것이죠.
그리고 스레드가 종료되면 해당 스레드의 스택도 메모리에서 해제됩니다.
2-2 스레드의 상태(State)
프로세스와 마찬가지로 스레드에도 상태가 있습니다.
NEW : 스레드가 생성되고 호출되지 않은 상태
RUNNABLE : 스레드가 실행 가능한 상태
RUNNING : 스레드가 CPU를 할당받아 실행 중인 상태
WAITING : 특정 조건이 충족되기를 기다릴 때의 상태
TIMED_WAITING : 특정 시간 동안만 대기하는 상태
BLOCKED : 다중 스레드 환경에서 한 스레드가 공유 리소스에 대한 락을 소유하고 있을 때 다른 스레드가 요청한 상태
TERMINATED : 스레드가 실행 완료 후 종료된 상태. 메모리에서 제거된다.
2-3 TCB (Thread Control Block)
PCB처럼 TCB도 각 스레드마다 운영 체제에서 유지하는 스레드에 대한 정보를 담고 있습니다. 그리고 TCP는 PCB 안에 있으며 또한 스레드 ID, 스레드 상태, 우선순위, CPU 정보 등을 저장합니다. PCB와 마찬가지로 운영 체제에 의해서 생성되며 실행을 마치고 소멸될 때 함께 소멸됩니다.
3. 프로세스와 스레드의 동시 실행
친구들과 게임을 하며 통화를 하고, 혹은 메신저를 확인하며 음악을 들을 때가 있습니다. 이런 상황에서는 여러 프로그램들이 동시에 실행되는 것처럼 보입니다. 정말 이게 가능한 걸까요? 아니 어떻게 동시에 동작할 수 있을까요?
이에 대한 응답은 멀티태스킹 기술에 있습니다. 멀티태스킹이란, 여러 프로세스를 동시에 처리하는 기술로, 컴퓨터가 여러 작업을 효율적으로 처리할 수 있도록 합니다. 그러나 여기서 "동시에"라는 말의 진정한 의미는 CPU가 하나인 경우에는 조금 다른 방식이 됩니다.
우선 아까 간략히 설명한 프로세싱의 발전 과정을 먼저 설명하겠습니다.
1. 단일 프로세스 (Single Process)
초창기 컴퓨터는 단일 프로세스 시스템이었습니다. 한 번에 하나의 프로그램만이 실행되어 효율적이지 않았고 I/O 상태가 된다면 CPU가 놀아버리며 CPU 사용률이 효율적이지 않게 되는 문제가 있었습니다.
2. 멀티 프로그래밍
이런 문제를 해결하려 여러 개의 프로그램을 메모리에 올려놓고 하나의 CPU에서 번갈아 가며 동시에 실행시키는 방안을 첨가했습니다. CPU의 사용률을 극대화시키는데 목적을 뒀기에 단일 프로세스의 문제점인 I/O 작업 시 CPU의 방치가 아닌 다음 프로세스를 시작해 공백을 채우는 것입니다.
3. 멀티태스킹
하나 멀티 프로그래밍 방식에도 문제가 있었는데, 한 프로그램의 사용 시간이 길어지면 다른 프로세스는 계속 대기 상태여야 한다는 것이었습니다.
이런 단점도 해결하기 위해 프로세스가 한번 CPU를 사용할 때 아주 짧은 시간만 실행되도록 하여 작업 응답 시간을 최소화시키는 멀티태스킹 원리가 탄생하게 됩니다.
이때 잘게 나뉜 프로세스끼리 작업이 교환되는 것을 Context Switching(문맥 교환)이라고 합니다.
3-1. Context Switching
Context Switching의 장점을 정리해 보자면
1. 빠른 반응성 제공
CPU가 빠르게 번갈아 가며 수행함으로써, 여러 작업을 동시에 처리하는 것처럼 보이게 만들어, 사용자에게 더 빠른 반응성을 제공하여 동시에 실행되는 것처럼 보이게 만듭니다.
2. 자원 효율성 증가
CPU가 여러 프로세스를 번갈아 가며 처리하므로,
자원을 낭비하지 않고 효율적으로 사용할 수 있습니다.
3. 우선순위 조절
우선순위가 높은 작업은 더 자주 실행되어 더 빠른 처리를 할 수도 있습니다.
그러나 이런 장점에 Context Switching을 과하게 많이 일어나게 하면 성능 이슈가 발생할 수 있습니다. 이유는 프로세스 간의 교환 비용이 크기 때문입니다.
결국 멀티태스킹의 문제점은 단일 코어이기 때문에 발생한 문제입니다.
고로 이 문제를 해결하기 위해 멀티 코어 CPU가 나오게 되었고 이것을 멀티 프로세싱이라고 부릅니다.
3-2. 멀티 프로세싱
멀티태스킹은 하나의 CPU에서 여러 프로세스의 교환으로 작업량을 늘렸다면 멀티 프로세싱은 물리적 코어를 늘려 작업량을 늘리는 방식입니다.
즉, 멀티태스킹은 소프트웨어적인 방법이며 멀티 프로세싱은 물리적 방법이라고 할 수 있죠.
3-3. Thread Context Switching
Thread Context Switching은 멀티 스레딩 환경에서 하나의 스레드가 실행 상태를 중단하고 다른 스레드로 전환하는 과정입니다. 이 과정에서 Context Switching과 다른 점은 Context Switching은 프로세스 자체를 교환하는 것이라면, Thread Context Switching은 스레드를 교환하는 방식입니다.
아까 2-1-2의 스레드와 프로세스의 차이를 설명할 때 나온 것과 같이 Thread Context Switching은 Context Switching보다 가볍습니다.
3-4. 끝으로
지금까지 설명한 Context Switching이나 Thread Context Switching, 멀티 프로세싱은 모두 개별로 쓰이는 것이 아닌 같이 쓰이며 효율을 극대화시킵니다.
이번 것을 조사하고 공부해 보며 지식들이 많이 늘었습니다.
뜻깊은 시간이었습니다.
참고
%EC%93%B0%EB%A0%88%EB%93%9C-%EC%B0%A8%EC%9D%B4
👩💻 완전히 정복하는 프로세스 vs 스레드 개념
한눈에 이해하는 프로세스 & 스레드 개념 전공 지식 없이 컴퓨터의 프로그램을 이용하는데는 문제 없어 왔지만 소프트웨어를 개발하는 사람으로서 컴퓨터 실행 내부 요소를 따져보게 될때, 아
inpa.tistory.com
https://velog.io/@sarang_daddy/CS-%EC%8A%A4%EB%A0%88%EB%93%9CThread
[CS] 스레드(Thread)
앞서 공부한 프로세스 스케줄링에서 "스레드"에 대해 더 자세히 정리하고 이해해보자.
velog.io
https://beststar-1.tistory.com/6
스레드(Thread) - 개념, 사용이유, 프로세스와의 비교, 상태, 우선순위, 종류
프로세스 운영체제에 의해 메모리 공간을 할당받아 CPU에서 실행/제어되고 있는 프로그램이다. 종종 '스케줄링의 대상이 되는 작업'이라는 용어와 거의 같이 쓰인다. 데이터(data) + 자원(memory) +
beststar-1.tistory.com
https://hyunie-y.tistory.com/31
운영체제 5: 컨텍스트 스위칭 (Context Switching)
컨텍스트 스위칭이란 여러개의 프로세스가 실행되고 있을 때 기존에 실행되던 프로세스를 중단하고 다른 프로세스를 실행하는 것. 즉, CPU에 실행할 프로세스를 교체하는 기술이다. PCB 컨텍스트
hyunie-y.tistory.com
https://velog.io/@mingadinga_1234/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EB%9E%80-
%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%9D%98-%EC%83%81%ED%83%9C
프로세스란? 프로세스의 상태
이 포스팅에서 다루는 내용 : 프로세스, PCB, 프로세스의 상태와 변화, 활성 vs 보류 상태, 생성, 준비, 실행, 대기, 종료, 보류 준비, 보류 대기
velog.io
https://hbyyy.github.io/2020/02/14/OS-process%EA%B5%AC%EC%A1%B0/
OS - 프로세스 구조
프로세스란?프로세스란 간단히 정리하면 실행 중인 프로그램 이라고 할 수 있습니다. 프로그램은 실행 하기 전에는 보조 기억 장치(SSD나 HDD)에 저장되어 실행을 기다리고 있는데, 이 프로그램이
hbyyy.github.io
https://learncom1234.tistory.com/80
메모리 영역 (Rodata, bss등)
이 설명은 리눅스 기준으로 설명된다. 오른쪽 이미지가 리눅스의 각 메모리 영역을 의미하며, Text,Rodata,data,BSS,Heap, Stack을 차례로 설명하겠다. 1. Text 영역 (code 영역) 1. 우리가 작성한 코드가 컴파
learncom1234.tistory.com
https://hannahsecurity.tistory.com/entry/OS-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-Process-2-
%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EA%B0%84-%EC%9E%90%EC%9B%90-%EA%B3%B5%EC%9C%A0-IPC
[OS] 프로세스 Process (2) - 프로세스 간 자원 공유 (IPC)
IPC (Inter-Process Communication) 이전 포스트에서 프로세스들은 서로 다른 메모리 공간을 차지한다고 했다. 이에 비교해서 스레드는 한 프로세스 내에서 스택 외 다른 데이터들은 공유한다고 했다. 그
hannahsecurity.tistory.com
CPU의 멀티 코어에 대해 / 듀얼코어 트리플코어 쿼드코어 헥사코어
CPU의 코어에 대해 알기 전에 CPU가 하는 역할에 대해 참고하시려면 먼저 아래의 포스팅을 참고해주시기 바랍니다. 컴퓨터의 CPU란 무엇인가? 클럭 코어 컴퓨터의 성능을 가늠해보려고 할 때 가장
joongkkukma.tistory.com
커널(Kernel)이란 무엇일까? (개념, 이중 모드, 쉘의 역할)
커널(Kernel)은 컴퓨터 운영체제의 핵심 부분으로,하드웨어 자원을 관리하고 응용 프로그램과 하드웨어 사이의 인터페이스 역할을 수행합니다.<p style="text-align: center;" data-ke-size="size1..
jdcyber.tistory.com