정의\
운영 체제(OS)는 컴퓨터의 하드웨어 및 소프트웨어 리소스를 관리하고 제어하는 기본 소프트웨어입니다. 컴퓨터 사용자와 컴퓨터 하드웨어 사이의 중개자 역할을 하며 다른 소프트웨어를 실행하기 위한 플랫폼을 제공합니다.
os는 가장 primary한 software로써 하드웨어와 user and other system programs의 사이에 위치한다.
눈여겨 볼것은 os가 위와같은 계층의 형태를 띄고 있다.
그리고 포스팅하는 블로그는 Linux를 위주로 알아 볼 것이다.
정의\
하나 혹은 그 이상의 Thread로 실행되는 컴퓨터 프로그램의 instance이다. Process는 Program code와 그 activity를 포함한다.\
출처
즉, Task와 같은 의미를 띄고 있다.\
대략 위와같은 구조를 각 Process별로 가지고 있다.\
자세한 사항은 [[Process Memory Allocation]]에 포스팅 하겠다.\
대략적으로
정의\
스레드(thread)란 프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미합니다.\
모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행합니다.\
출처
현대의 OS는 Process의 1개 이상의 Thread를 가지고 실제로 Thread 단위로 Scheduling한다.\
실제로 process내부에서 왼쪽과같은 형태로 memory를 점유한다.
Multi Process의 정의\
다중 처리는 여러 독립 프로세서가 단일 컴퓨터 시스템에 통합되어 여러 작업을 동시에 병렬 처리할 수 있는 컴퓨터 시스템 아키텍처의 한 유형입니다.
Multi Thread의 정의\
멀티스레딩은 단일 프로세스가 여러 실행 스레드를 가질 수 있도록 하는 일종의 컴퓨터 아키텍처입니다. 각 스레드는 병렬로 실행되며 별도의 작업을 처리할 수 있습니다.
Multi Process\
Processor(이하 CPU)는 process단위로 일을 처리한다. OS도 그러한 Process를 변화해가며 Task를 수행한다.\
하지만 컴퓨터 기술이 발전하면서 컴퓨터에 병렬 Processor를 탑재하게 됨으로써, 다양한 process를 실행한다. 그러므로 동시에 process를 병렬적으로 실행하는데 다양한 장담점을 품는다.
장점
Multi Thread\
이는 한 Process안에서의 작업이므로 많은 부분을 Thread끼리 공유한다. 이는 그 만큼 바꿀것이 적다는 것을 의미한다.
장점
Context Switching
이 빠르다. (캐시 메모리를 비울 필요가 없음)Context Switching
이 빠른 장점이 있지만, 동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료될 위험을 갖고 있다.그래서 뭘 사용하지?\
- Multi Process는 IPC를 통해 소통하는데, 이는 메모리 사용측면에 오버헤드가 크고, 올바른 메모리 공유를 위한 복잡한 동기화가 필요하다.
- Multi Process는 한 프로세스가 잘못되어도 다른데 영향을 안미치기 때문에 디버깅에 큰 문제가 생긴다.
Process Control Block의 정의\
특정한 프로세스를 관리할 필요가 있는 정보를 포함하는, 운영체제 커널의 자료구조입니다. PCB는 운영 체제가 프로세스를 표현한 것이라 할 수 있습니다
쉽게 말해 해당 프로세스의 정보모음이다.\
이는 OS가 PCB를 보고 해당 process의 우선순위를 정하거나 Ready상태의 Process를 Running하기 위해 메모리를 초기화 시킬 정보를 가지고 있다.\
OS는 빠른 process조회를 위해 process table(Linked list)을 가지고 있는데, 여기에 pid(process id)와 PCB pointer가 있다.
정의\
여러개의 프로세스가 실행되고 있을 때, 기존에 실행되던 프로세스를 중단하고 다른 프로세스를 실행하는 것 즉, CPU에 실행되는 프로세스를 교체하는 것
위와 같은 순서로 context switching은 이뤄진다.
1. 스케줄러가 P0 프로세스의 실행을 중단하고 P1 프로세스를 실행할 것을 요청함
2. P0프로세스에서 Stack의 데이터 위치를 가리키고 있는 SP(Stack pointer)의 값과 다음 실행해야하는 코드의 주소값을 가지고 있는 PC(Program Counter)의 값을 PCB에 저장함 (운영체제에서 관리)
3. P0프로세스는 ready 상태로 바뀌고, CPU에서 P1 프로세스를 실행함. 이 과정을 통해 P1 프로세스의 상태가 ready에서 running으로 바뀌는데, 이 작업을 디스패치(dispatch)라고 한다.
4. 반대로 다시 P1프로세스에서 P0프로세스로 컨텍스트 스위칭을 할 경우, P1프로세스의 SP값과 PC값을 PCB에 저장하고(이 때 PCB는 P0프로세스의 위치값을 저장하는 PCB와는 별도로 생성되는 메모리 공간임) P0프로세스의 PCB에서 SP값과 CP값을 찾아 SP와 PC에 덮어씌움.
Context switching은 assembler로 되어있다?
초기에 context switcing은 잦은 수행으로 인해 속도 향상을 위해 어셈블리어로 작성되어 있는 경우가 많았다. 하지만 이는 새로운 CPU에 대한 이식성이 떨어져서 C코드로 작성하고 이를 컴파일러를 통해 어셈블리어로 바꾸어 어쩔수 없는 overhead가 있었는데, 현대는 컴파일러의 발전으로 많이 극복되었다고 한다.
정의\
프로세스들끼리 서로 데이터를 주고받는 행위 또는 그에 대한 방법을 뜻한다.
위해서 설명했던 것 처럼 process는 독립적인데 이는 서로간의 소통을 힘들게 한다는 단점을 지니고 있었다.\
그래서 프로세스간 소통을 하기 위해 다양한 방법이 연구되었다.