Computer
OS를 사용하는 이유(개발자 입장)
- 주요 구성 요소
요소 | 역할 |
CPU | Central Processing Unit(중앙 처리 장치): 연산 |
Memory(주 기억 장치, RAM) | 데이터 저장(휘발성) |
(SSD,HDD,…)보조 기억 장치 | 데이터 저장 |
I/O 장치 | 모니터, 키보드, 마우스 등 |
- OS가 위에 언급된 구성 요소를 관리한다
- 프로세스 관리 및 CPU스케줄링
- 메모리 관리
- 보조 기억 장치 데이터(파일)관리
- I/O처리
- 개발자가 OS를 알고있어야 하는 이유
- 추후 AWS서버에서 램, CPU를 설정할때 사용량에 관련해서 지나치게 비용지불을 하지 않아도 된다
Process/Thread
Process(프로그램 실행 단위)
프로그램을 실행 → 하나의 프로세스가 생성 → CPU할당과 메모리에 적재
- 응용 프로그램이 Memory에 적재되고, CPU를 할당 받아서 실행되는것
- 모든 프로그램은 RAM에서 읽어서 작동이 된다.(RAM 위에서 작동된다)
- 프로세스 메모리 영역
- Code, Data, Heap, Stack
- PCB(Process Control Block): 프로세스 실행과 관련된 전반적인 정보 저장
- Context Switching(문맥 교환)
- 기존에 수행 중이던 프로세스에 대해 PCB에 백업
- 새로운 수행할 프로세스에 대해 PCB에 로드
PCB와 Context Switching 그림설명

유저가 줌으로 실시간 화상회의를 하는 와중에 PPT를 작업하는중이라고 가정한다면
CPU는 PPT PCB와 줌 PCB를 번갈아가면서 작업해야할것이다.
이때 일어나는게 Context Switching 이다.


Thread
- 프로세스를 구성하는 실행 흐름 단위
- 프로세스 메모리 영역을 공유해서 사용한다.
- Thread 마다 Stack은 분리해서 사용한다.(이유는 만일 스택에 쓰레드1이 하는일 들어가고 쓰레드 2가 하는일이 Stack에 들어간다음에 쓰레드 1이하는일이 끝나면 스택 특성상 쓰레드 2가하는일이 먼저빠져야하는데 쓰레드1이 한일은 갇히게 된다.
- 흔히 프로세스에 비해 쓰레드는 가볍다(경량 프로세스)
- 이렇게 말하는 이유는 프로세스가 생성될때는 메모리영역 4개랑, PDB새로 생성해야할정도로 CPU에 부담이 가는데 쓰레드는 그정도까지는 아니다.(Memory할당이 적다)
Multi Process
- 하나의 응용 프로그램에서 다수의 Process를 동시에 실행하는 것
- 하나의 부모 프로세스가 여러 개의 자식 프로세스를 생성한다
- 하나의 프로세스가 문제가 생겨도 다른 프로세스를 사용하면 되기 때문에 서비스 안정성을 확보 할 수 있다.(동일한 서버 역할을 하는 서버 프로세스를 다수 생성하기 때문)
- Context Switching에 대한 Overhead가 있다.(그만큼 자원을 사용한다)
- Process사이에서는 자원 메모리를 공유한다(IPC사용)
Synchronize(동시성)
- 동시성 이슈(Race Condition)
- DB 트랜잭션 문제랑 비슷하다고 생각함(같은 자원을 여러개의 쓰레드가 사용하다보면 문제가 생김)
- 공통된 자원을 여러 쓰레드가 사용할때 적절한 방법: 사용시 락을 걸어야 한다. 다 완료하면 Unlock
- 공유 자원: 각 Process 혹은 Thread가 동시에 접근할 수 있는 자원, 변수 등
- 임계 영역(Critical section): 동시성 이슈가 발생하는 코드(로직) 영역
- 해결방법: 뮤텍스(Mutex), 세마포어, 모니터
- Mutex(화장실 한칸): 프로세스(혹은 Thread)가 사용시점에 Lock을 걸고 사용이 끝난 후 Unlock
- Semaphore(화장실 여러칸): 공유 자원에 대해서 동시에 접근할 수 있는 프로세스(혹은 Thread)의 수를 제어함
교착 상태(Dead Lock)

- 꼬리가 꼬리를 물면서 나가지 못하는 상태
- 그림으로 이해하는게 편하다
- 필요 조건
- 상호 배제: 하나의 프로세스가 공유 자원을 점유하고 있을 때 다른 프로세스는 기다려야한다
- 점유와 대기: 특정 프로세스가 공유 자원을 점유한 상태에서 다른 공유 자원을 사용하기 위해 대기하고 있는 상황이 있어야 한다
- 비선점: 다른 프로세스가 점유한 자원을 강제로 빼앗을 수 없음
- 환형 대기: 각 프로세스가 서로가 필요한 공유 자원을 점유하고 대기하는 원형을 이루어야한다
CPU Scheduling
- CPU는 여러 작업을 동시에 수행할 수 없지만, 처리해야할 Process는 다수이기 때문에 적절한 스케줄링을 통해서 작업을 수행한다.
- 스케줄링 방식: 먼저 요청한 프로세스 작업을 먼저처리할 수도 있겠지만 빨리 처리해야 될 작업의 수행이 딜레이 될 수도 있고, 처리에 아주 짧은 시간이 소요되는 작업도 다른 작업에 밀려 오래 기다려야하는 비효율이 발생한다.
- 예시: 응급실 상황
- 스케줄링 종류
- 비선점형 스케줄링
- 어떤 프로세스가 다른 프로세스에 인해 작업 중인 CPU를 선점할 수 없다.(뺏어갈 수 없다)
- FCFS(First Come First Served): 가장 먼저 요청한 프로세스를 가장 먼저 수행함
- SJF(Shortest Job First)(*선점형과 비선점형으로 나뉜다): 실행 시간이 짧은 프로세스 가장 먼저 수행, 긴 수행시간 가진 프로세스는 대기시간이 너무길거나 실행되지않는(고아)현상 발생
- 우선 순위(선점형과 비선점형으로 나뉨): 프로세스에 대한 우선순위를 둬서 순위가 높은 프로세스를 먼저 수행함
- 선점형 스케줄링
- 어떤 프로세스가 다른 프로세스로 인해 작업 중인 CPU를 선점할 수 있다(뺏을 수 있다)
- Round Robin(RR): 할당시간만큼 각각의 프로세스가 번갈아가면서 작업
- ex. 할당시간이 10초라면 A(10초), B(10초), C(10초), A(10초), B(10초)….
- 할당 시간이 너무 짧으면 Context Switching이 자주 발생할 수 있기 때문에 비용이 증가한다.
- Multi-Level Queue(다단계 큐): Round Robin이 유명하고 많이 사용해서 사실 크게 기억할건 없다. 그냥 존재한다 정도만
- 비선점형 스케줄링
Memory
- 모든 프로그램(프로세스)은 메모리(RAM) 위에서 동작한다
- 이론상 RAM이 부족하면 프로세스를 수행할 수 없지만, 가상 메모리 기능을 통해 부족한 RAM을 SSD, HDD등을 할당해서 사용한다 이럴경우 RAM에 비해 SSD, HDD등이 속도가 더 느리기 때문에 성능이 저하된다.
- Page Fault: 이제 램에서 커버가 안되는 용량을 SSD, HDD에 저장을 하는데 이후 다시 RAM에서 실행하고자할때 RAM에 없는 경우를 말한다
- Page 교체 알고리즘
- Page: 가상 메모리 블럭(가상 메모리를 사용하는 운영체제에서 최소 단위)
- Page Fault: 자주 발생하면 성능이 저하된다.(Thrashing)
- 페이지 폴트 발생횟수를 체크
- FIFO(Fisrt-In-First-Out)
- 먼저 들어간 페이지를 밀어낸다
- 한마디로 queue생각하면 편함(7 0 1순으로 들어오면 교체될때도 7 0 1순으로 교체됨)
- LRU(Least Recentily Used)
- 가장 오랫동안 사용되지 않을 것 같은 페이지 교체(미래 사실 활용)
- 들어와있는 페이지중 제일 나중에 있는 reference string 페이지를 프레임에서 빼줌
- ex. 7 0 1 이 3개가 프레임안에 있는데 2가 새로들어옴 이때 7 0 1중 들어올 다시 들어오게 될때 제일 마지막에 들어오는수를 빼줌
- 여러분의 알고리즘이 얼마나 성능이 좋은 지 평가하는데 사용
- LRU(Least Recently Used)
- 가장 오랫동안 사용되지 않았던 페이지 교체(과거의 사실 활용)
- 7 0 1페이지 프레임 reference string으로 0과 1이 최근에 나왔으면 나온지 오래된 7이 다음 페이지프레임 변경때 바뀐다
출처
- 조르디 CS강의
- 운영체제, Operating System Concepts(박민규 옮김) 흔히 말하는 공룡책
'CS' 카테고리의 다른 글
[네트워크] 네트워크 계층 (1) | 2024.09.22 |
---|---|
[REST API]REST API란 무엇인가 (0) | 2023.08.04 |
Computer
OS를 사용하는 이유(개발자 입장)
- 주요 구성 요소
요소 | 역할 |
CPU | Central Processing Unit(중앙 처리 장치): 연산 |
Memory(주 기억 장치, RAM) | 데이터 저장(휘발성) |
(SSD,HDD,…)보조 기억 장치 | 데이터 저장 |
I/O 장치 | 모니터, 키보드, 마우스 등 |
- OS가 위에 언급된 구성 요소를 관리한다
- 프로세스 관리 및 CPU스케줄링
- 메모리 관리
- 보조 기억 장치 데이터(파일)관리
- I/O처리
- 개발자가 OS를 알고있어야 하는 이유
- 추후 AWS서버에서 램, CPU를 설정할때 사용량에 관련해서 지나치게 비용지불을 하지 않아도 된다
Process/Thread
Process(프로그램 실행 단위)
프로그램을 실행 → 하나의 프로세스가 생성 → CPU할당과 메모리에 적재
- 응용 프로그램이 Memory에 적재되고, CPU를 할당 받아서 실행되는것
- 모든 프로그램은 RAM에서 읽어서 작동이 된다.(RAM 위에서 작동된다)
- 프로세스 메모리 영역
- Code, Data, Heap, Stack
- PCB(Process Control Block): 프로세스 실행과 관련된 전반적인 정보 저장
- Context Switching(문맥 교환)
- 기존에 수행 중이던 프로세스에 대해 PCB에 백업
- 새로운 수행할 프로세스에 대해 PCB에 로드
PCB와 Context Switching 그림설명

유저가 줌으로 실시간 화상회의를 하는 와중에 PPT를 작업하는중이라고 가정한다면
CPU는 PPT PCB와 줌 PCB를 번갈아가면서 작업해야할것이다.
이때 일어나는게 Context Switching 이다.


Thread
- 프로세스를 구성하는 실행 흐름 단위
- 프로세스 메모리 영역을 공유해서 사용한다.
- Thread 마다 Stack은 분리해서 사용한다.(이유는 만일 스택에 쓰레드1이 하는일 들어가고 쓰레드 2가 하는일이 Stack에 들어간다음에 쓰레드 1이하는일이 끝나면 스택 특성상 쓰레드 2가하는일이 먼저빠져야하는데 쓰레드1이 한일은 갇히게 된다.
- 흔히 프로세스에 비해 쓰레드는 가볍다(경량 프로세스)
- 이렇게 말하는 이유는 프로세스가 생성될때는 메모리영역 4개랑, PDB새로 생성해야할정도로 CPU에 부담이 가는데 쓰레드는 그정도까지는 아니다.(Memory할당이 적다)
Multi Process
- 하나의 응용 프로그램에서 다수의 Process를 동시에 실행하는 것
- 하나의 부모 프로세스가 여러 개의 자식 프로세스를 생성한다
- 하나의 프로세스가 문제가 생겨도 다른 프로세스를 사용하면 되기 때문에 서비스 안정성을 확보 할 수 있다.(동일한 서버 역할을 하는 서버 프로세스를 다수 생성하기 때문)
- Context Switching에 대한 Overhead가 있다.(그만큼 자원을 사용한다)
- Process사이에서는 자원 메모리를 공유한다(IPC사용)
Synchronize(동시성)
- 동시성 이슈(Race Condition)
- DB 트랜잭션 문제랑 비슷하다고 생각함(같은 자원을 여러개의 쓰레드가 사용하다보면 문제가 생김)
- 공통된 자원을 여러 쓰레드가 사용할때 적절한 방법: 사용시 락을 걸어야 한다. 다 완료하면 Unlock
- 공유 자원: 각 Process 혹은 Thread가 동시에 접근할 수 있는 자원, 변수 등
- 임계 영역(Critical section): 동시성 이슈가 발생하는 코드(로직) 영역
- 해결방법: 뮤텍스(Mutex), 세마포어, 모니터
- Mutex(화장실 한칸): 프로세스(혹은 Thread)가 사용시점에 Lock을 걸고 사용이 끝난 후 Unlock
- Semaphore(화장실 여러칸): 공유 자원에 대해서 동시에 접근할 수 있는 프로세스(혹은 Thread)의 수를 제어함
교착 상태(Dead Lock)

- 꼬리가 꼬리를 물면서 나가지 못하는 상태
- 그림으로 이해하는게 편하다
- 필요 조건
- 상호 배제: 하나의 프로세스가 공유 자원을 점유하고 있을 때 다른 프로세스는 기다려야한다
- 점유와 대기: 특정 프로세스가 공유 자원을 점유한 상태에서 다른 공유 자원을 사용하기 위해 대기하고 있는 상황이 있어야 한다
- 비선점: 다른 프로세스가 점유한 자원을 강제로 빼앗을 수 없음
- 환형 대기: 각 프로세스가 서로가 필요한 공유 자원을 점유하고 대기하는 원형을 이루어야한다
CPU Scheduling
- CPU는 여러 작업을 동시에 수행할 수 없지만, 처리해야할 Process는 다수이기 때문에 적절한 스케줄링을 통해서 작업을 수행한다.
- 스케줄링 방식: 먼저 요청한 프로세스 작업을 먼저처리할 수도 있겠지만 빨리 처리해야 될 작업의 수행이 딜레이 될 수도 있고, 처리에 아주 짧은 시간이 소요되는 작업도 다른 작업에 밀려 오래 기다려야하는 비효율이 발생한다.
- 예시: 응급실 상황
- 스케줄링 종류
- 비선점형 스케줄링
- 어떤 프로세스가 다른 프로세스에 인해 작업 중인 CPU를 선점할 수 없다.(뺏어갈 수 없다)
- FCFS(First Come First Served): 가장 먼저 요청한 프로세스를 가장 먼저 수행함
- SJF(Shortest Job First)(*선점형과 비선점형으로 나뉜다): 실행 시간이 짧은 프로세스 가장 먼저 수행, 긴 수행시간 가진 프로세스는 대기시간이 너무길거나 실행되지않는(고아)현상 발생
- 우선 순위(선점형과 비선점형으로 나뉨): 프로세스에 대한 우선순위를 둬서 순위가 높은 프로세스를 먼저 수행함
- 선점형 스케줄링
- 어떤 프로세스가 다른 프로세스로 인해 작업 중인 CPU를 선점할 수 있다(뺏을 수 있다)
- Round Robin(RR): 할당시간만큼 각각의 프로세스가 번갈아가면서 작업
- ex. 할당시간이 10초라면 A(10초), B(10초), C(10초), A(10초), B(10초)….
- 할당 시간이 너무 짧으면 Context Switching이 자주 발생할 수 있기 때문에 비용이 증가한다.
- Multi-Level Queue(다단계 큐): Round Robin이 유명하고 많이 사용해서 사실 크게 기억할건 없다. 그냥 존재한다 정도만
- 비선점형 스케줄링
Memory
- 모든 프로그램(프로세스)은 메모리(RAM) 위에서 동작한다
- 이론상 RAM이 부족하면 프로세스를 수행할 수 없지만, 가상 메모리 기능을 통해 부족한 RAM을 SSD, HDD등을 할당해서 사용한다 이럴경우 RAM에 비해 SSD, HDD등이 속도가 더 느리기 때문에 성능이 저하된다.
- Page Fault: 이제 램에서 커버가 안되는 용량을 SSD, HDD에 저장을 하는데 이후 다시 RAM에서 실행하고자할때 RAM에 없는 경우를 말한다
- Page 교체 알고리즘
- Page: 가상 메모리 블럭(가상 메모리를 사용하는 운영체제에서 최소 단위)
- Page Fault: 자주 발생하면 성능이 저하된다.(Thrashing)
- 페이지 폴트 발생횟수를 체크
- FIFO(Fisrt-In-First-Out)
- 먼저 들어간 페이지를 밀어낸다
- 한마디로 queue생각하면 편함(7 0 1순으로 들어오면 교체될때도 7 0 1순으로 교체됨)
- LRU(Least Recentily Used)
- 가장 오랫동안 사용되지 않을 것 같은 페이지 교체(미래 사실 활용)
- 들어와있는 페이지중 제일 나중에 있는 reference string 페이지를 프레임에서 빼줌
- ex. 7 0 1 이 3개가 프레임안에 있는데 2가 새로들어옴 이때 7 0 1중 들어올 다시 들어오게 될때 제일 마지막에 들어오는수를 빼줌
- 여러분의 알고리즘이 얼마나 성능이 좋은 지 평가하는데 사용
- LRU(Least Recently Used)
- 가장 오랫동안 사용되지 않았던 페이지 교체(과거의 사실 활용)
- 7 0 1페이지 프레임 reference string으로 0과 1이 최근에 나왔으면 나온지 오래된 7이 다음 페이지프레임 변경때 바뀐다
출처
- 조르디 CS강의
- 운영체제, Operating System Concepts(박민규 옮김) 흔히 말하는 공룡책
'CS' 카테고리의 다른 글
[네트워크] 네트워크 계층 (1) | 2024.09.22 |
---|---|
[REST API]REST API란 무엇인가 (0) | 2023.08.04 |