프로세스 & 스레드
👉 프로세스와 스레드의 차이
프로세스(Process) : OS로 부터 자원을 할당 받아 독립적으로 실행되고 있는 객체(프로그램)
- 프로세스별로 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당
- 프로세스당 최소 1개의 스레드(메인 스레드)를 가짐.
- 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근 불가
- 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 한다. (ex. 파이프, 파일, 소켓 등을 이용한 통신 방법 이용)
- Context Switching 비용이 비교적 큼 / 동기화 작업 (공유 자원 관리) 필요 x
스레드 : 프로세스 내에서 실행되는 여러 흐름의 단위
- 프로세스 내 Stack 영역 독립 / Code, Data, Heap 영역은 공유
- 한 스레드가 프로세스 자원 변경시, 다른 이웃 스레드(sibling thread)도 변경 결과 조회 가능.
- Context Switching 비용이 비교적 작음 / 동기화 작업 (공유 자원 관리) 필요 o
👉 프로세스가 할당받는 자원 예
- Code, Data, Stack, Heap의 구조로 되어 있는 독립된 메모리 영역
- CPU 가용 가능 시간
멀티스레드, 멀티프로세스
👉 멀티 프로세스 vs 멀티 스레드
멀티 스레드 사용시 자원의 효율성 증대
- 멀티 프로세스 사용시 다수 프로세스 자원 할당 System Call이 많이 발생해 자원 효율에 더 안좋음
- 멀티 프로세스 사용시 프로세스 Context Switching 비용이 큼 (CPU 레지스터 교체 + 캐시 메모리(RAM과 CPU 사이))의 데이터 교체 필요
멀티 스레드 사용시 전환 처리 비용 감소 및 응답 시간 단축
- 스레드는 프로세스 내 Stack 영역을 제외한 모든 메모리를 공유 => 프로세스 간 통신(IPC)보다 스레드 간의 통신의 비용이 적음
- 스레드는 Stack 영역만 Context Switching 하면 되어 전환 속도가 빠르다.
👉 멀티 프로세스란? 장단점
하나의 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것
장점 : 안전성 (메모리 침범 문제를 OS 차원에서 해결)
단점 : 각각 독립된 메모리 영역을 갖고 있어, 작업량 많을 수록 오버헤드 발생. Context Switching으로 인한 성능 저하
ex) Slack, 카카오톡, chrome, vscode 켰을 때 시분할로 PCB_1, PCB_2, PCB_3 작동함
👉 멀티 스레드란? 장단점
스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하는 것
장점 : 독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 손실이 감소 전역 변수와 정적 변수에 대한 자료 공유 가능
단점 : 안전성 문제. 하나의 스레드가 임계 영역 망가뜨리면, 모든 스레드가 영향을 받을 수 있음 (공유 메모리를 갖기 때문)
- 멀티스레드의 안전성에 대한 단점은 Critical Section 기법을 통해 대비함
- 동기화를 수행하는 주체가 1명이냐 여러명이냐 차이
- 뮤텍스 : Key를 가지고 하나의 자원에 접근하여 lock / unlock 수행
- 세마포어 : 공유 자원에 접근할 수 있는 프로세스 최대 허용치만 한 개의 공유 변수를 통해 관리
👉 단일 코어 vs 멀티 코어
단일 코어의 동시성 (Concurrency) : 하나의 코어에서 하나 이상의 프로세스를 CPU가 짧은 순간으로 분할해서 일을 처리하여 동시에 진행되는 것처럼 보이는 것
멀티 코어의 병렬처리 (Parallelism) : 둘 이상의 코어에서 동시에 하나 이상의 프로세스가 한꺼번에 진행 되는 것
Process 스케쥴링 & CPU 스케쥴러 & 명령어
👉 CPU 스케쥴러란?
준비큐에 있는 프로세스에 대해 CPU를 할당하는 방법 (어떤 프로세스를 선택해 줄 것인가가 중요)
👉 CPU 스케쥴링 전략 갈래
선점형(Preemptive Scheduling) : 점유하고 있는 것을 뺏으며 동작(정해진 시분할 타임을 다 소진했거나, 특정 시스템 호출 종료로 인해 강제 중단)
- SRT(Shortest Remaining Time), RR(Round Robin)
- 응답이 빠르며 공평하지만, 자주 바꿔서 오버헤드 초래 가능
비선점형(Non-Preemptive Scheduling) : 프로세스가 자진 반납할 때 까지 작업 시간을 보장해주는 방식
- FCFS - First come First Served, ), SJF(Shortest Job First)
- 프로세스가 긴 경우에 걸려 비효율적인 시간 낭비 발생 가능
👉 프로세스 스케쥴링 방법인 Round Robin 이란?
프로세스들간에 우선순위를 두지 않고 순서대로 동일한 시간 간격 만큼 CPU를 할당 받는 스케쥴링 알고리즘
시간 간격이 크게 되면, 먼저 오는 순서대로 처리하는 FCFS(First Come First Served)같고,
시간 간격이 작으면 Context Switching이 잦아져 오버헤드 증가
👉 Process의 fork, exec, wait 비교
Process 생성(fork, exec)과 제어(wait)를 담당 역할.
- fork : Process를 생성할 때 사용하며, fork는 복사해서 process를 하나 만든다는 얘기
- exec : exec를 호출한 프로세스의 pid가 그대로 새로운 프로세스에 적용 (process 덮어씀)
- wait : Process (Parent)가 만든 다른 Process(child) 가 끝날 때까지 기다리는 명령어
Context Switching
👉 Context Swtiching 이란?
CPU가 이전의 프로세스 상태를 PCB에 보관하고, 또 다른 프로세스 정보를 PCB에 읽어서 레지스터에 적재하는 과정
👉 Context Swtiching 과정
0. Register (Task 정보) + PCB (Process Control Block, 프로세스 정보)로 관리 중
0. 레지스터에 있는 정보들을 CPU가 수행 중
1. 현재 실행하고 있는 프로그램의 Interrupt 발생
2. 현재 실행 중인 Process 정보를 PCB에 저장
3. 다음 실행할 Task의 PCB 정보를 읽어 Register에 적재
👉 Context Swtiching 비용이 Process > Thread 인 이유
Context Switching 비용은 Process가 Thread보다 높다. Thread는 Stack 영역을 제외한 모든 메모리를 공유하므로 Context Switching 수행 시 Stack 영역만 변경하면 되기 때문에 비용이 적게 든다.
PCB Block
👉 PCB 란?
Process Control Block의 약자로 OS가 프로세스 생성시 프로세스에 대한 중요한 정보를 저장하는 저장장소 (주기억장치)
PID : 프로세스 고유 번호
Process State : 프로세스 상태 (준비, 대기, 실행중 등)
Program Counter : 다음 실행될 프로세스 포인터
Register Information : 레지스터 관련 정보
Scheduling information : 스케쥴링 및 프로세스 우선순위
Memory related information : 할당된 자원 정보
Accounting information : CPU 사용시간, 실제 사용된 시간
Status information related I/O : 입출력 상태 정보
https://jhnyang.tistory.com/33
프로그램 & IPC
👉 프로그램이 되면서 일어나는 일
프로세스에서 요구하는 재료들이 메모리(Code, Data, Heap, Stack)로 올라감
해당 프로세스에 대한 정보를 담은 PCB Block 생성 (프로세스 상태, 고유번호 PID, 다음명령 가리키는 Program Counter)
👉 프로그램 실행 방식 요약
OS의 커널이 보조기억장치(HDD/SDD)위에 있는 프로그램을 메모리에 올려 프로세스로 만들고 Interrupt가 발생한 CPU가 메모리에 존재하는 Process 명령어를 해석해서 실행하는 것
👉 IPC (Inter Process Communication) 란?
멀티 프로세스간 데이터를 주고받을 떄 사용하는 공유 데이터 관리 메커니즘으로 스레드의 공유보다는 속도가 늦다.
IPC 예 : 공유 메모리, 파일, 소켓, 익명 파이프, 명명 파이프, 메시지큐
👉 IPC (프로세스 간 통신) 주요 방법
- Shared Memory : 커널이 관리하는 메모리 영역에 다수의 프로세스들에 Attach, 프로세스들 Read/Write 하는 방식
- Temporary Buffer : 임시 버퍼를 활용한 단방향 전달하는 PIPE 방법
- Socket : Port를 binding 하고 같은 호스트 내 상대 port에 데이터 전달, 양방향됨
- MQ (메시지 큐) : 데이터를 MQ 에 담고, 특정 프로세스(Worker)에 메시지를 전달 (RabbitMQ + Celery)
👉 IPC (프로세스 간 통신) 이 어려운 이유
독립된 메모리 영역을 가지고 있어, 상대방의 메모리 영역의 자원을 해당 프로세스에 올려야 하며, 그 과정의 Context Switching 비용이 비쌈
👉 쉘(shell) 이란?
쉘 : 사용자가 컴퓨터에 명령을 할 수 있도록 하는 프로그램
sh - 최초의 shell
bash - Linux의 표준 shell
zsh - Mac 카탈리나 OS의 기본 shell
👉 환경변수
export 이용 환경변수 설정시, 터미널 종료시 해제됨
~/.bashrc나 ~/.zshrc에 등록하여 영구적으로 사용 가능
👉 chmod 명령어
r : read(4)
w : write(2)
x : execute(1)
rwx (7),
755, 644
소유자/그룹사용자/모든사용자
👉 Linux 파일 시스템 구성
- / : 최 상위 계층구조
- /bin : 사용자(user) 기본 커맨드(유틸리티) binaries (ex. ls, cp, chmod 등)
- /sbin : 시스템 관리자(root)를 위한 커맨드(유틸리티) binaries (ex. reboot, fdisk )
- /usr : 사용자 응용 프로그램 (/usr/bin : /bin을 제외한 유저 커맨드 binaries - gcc, perl 등, /usr/local/bin : )
- /boot : OS 부팅에 필요한 파일
- /lib : 시스템 프로그램, 라이브러리 파일
- /dev : 디바이스 장치 (하드드라이브, USB 등 하드웨어 장치)
- /etc : 시스템 환경 설정 파일 (/etc/passwd : 유저 정보, /etc/hosts : 네트워크 정보, /etc/sysconfig)
- /home : 사용자홈디렉토리.사용자별개인파일,개인설정
- /mnt : 외장 기기 마운트
- /opt : 소프트웨어패키지설치시사용
- /var : 운영 중인 시스템에 대한 로그파일 (/var/log , /var/spool)
- /tmp : 임시 파일들이 저장되는 디렉터리
다음 글
[기술면접 대비] Operating System 2 - Mutex, Semaphore, DeadLock
https://yubi5050.tistory.com/232
[기술면접 대비] Operating System 3 - 메모리, 명령어
https://yubi5050.tistory.com/233
'기술 정리 & CS > 기술면접 대비' 카테고리의 다른 글
[기술 면접 대비] Operating System 3 - 메모리, 명령어 (2) | 2024.06.16 |
---|---|
[기술면접 대비] Operating System 2 - Mutex, Semaphore, DeadLock (1) | 2024.06.16 |
[기술면접 대비] Python & 자료구조 (0) | 2023.06.18 |
[기술면접 대비] Database 3 - Index, Replication (1) | 2022.12.13 |
[기술면접 대비] Database 2 - Transaction, 격리레벨, 동시성 (0) | 2022.12.12 |