Q. 백엔드 개발자가 OS 기본 지식이 필요한 이유
- 로그 분석, 배포 설정, WAS설치, 대용량 트래픽 처리(메모리 관리, OS 구조), 서버 개발(프로세스 & 쓰레드, 멀티쓰래딩), Docker 등 컨테이너 환경 사용
- 프로그래밍 언어는 OS API에 의존적이기 때문에 OS 지식 있는 경우 모든 프로그래밍 언어의 학습에 유리함
컴퓨터를 사용할 때 편리하게 사용할 수 있는 도구 응용 프로그램
HW위에서 응용프로그램을 interface하는 역할
💡 프로세스란 프로그램이 실행 상태에 있는 것을 뜻한다. 프로세서에게 할당하고 실행할 수 있는 엔티티
프로그램은 instruction의 연속으로 구성되어있다. 프로세스는 그 프로그램 instruction을 실행하는 것이다.
🗣누가 프로세스를 만드는가?
💡 쓰레드란 한 프로세스 안에서 여러 개 Thread를 만들어 사용할 수 있다.
한 프로세스에서 다른 프로세스로 전환하려면 context switch가 발생하는데 이때 걸리는 시간 보다 한 thread에서 같은 프로세스에서 다른 thread로 전환하는데 걸리는 시간이 짧다.
process context switch 시간이 더 많이 걸리는 이유는 메모리에 있는 user context(data, stack)을 변경해야 하므로 시간이 많이 걸린다. 쓰레드 전환은 user context 중 thread context인 stack만 바꾸면 되므로 시간이 적게 걸린다.
프로그램이 운영체제로 부터 할당받는 대표적인 메모리 공간은 아래와 같다.
메모리 구조: 코드 영역, 데이터 영역, 힙 영역, 스택 영역
malloc() 혹은 new 연산자를 통해 메모리를 할당하고, free() 혹은 delete 연산자를 통해 메모리를 해제한다. 💡Overflow란?
말 그대로 한정된 메모리 공간이 부족하여 메모리 안에 있는 데이터가 넘쳐 흐르는 현상이다.
오버 플로우 종류 중 Heap Overflow와 Stack Overflow가 있다.
힙은 메모리 위쪽 주소부터 할당되고, 스택은 메모리 아래쪽 주소부터 할당되기에 각 영역이 상대 공간을 침범 하는 일이 발생할 수 있다.
스택 영역: 컴파일 타임에 크기가 결정
힙 영역: 런타임에 크기가 결정
멀티 프로세싱은 multi processing 번역 그대로 cpu가 여러 개인 것이다.
1. 프로그램 안전성
2. context switching 비용 감소
3. 자원의 효율성: 자원을 공유하기에 효율성이 좋음
4. 응답 시간 단축
프로세스가 서로 정보를 공유할 수 있도록 지원
- Message Passing
- Shared Memory
shared Memory는 공유하는 메모리 공간을 만들어서 서로 다른 프로세스에서 data를 사용, Message Passing은 kernel을 통해 자원을 넣고 접근하고 넣고 접근하고 이런식으로 자원을 주고 받는다.
mode change
user mode → kernel mode
kernel mode → user mode
context switch ( = process switch)
서로 다른 프로그램으로 넘어가는 것
process1 → process2