Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 딥링크
- 포트폴리오
- 사이드프로젝트
- binary data to struct
- swift-nio
- deferred deeplink
- universal link
- swift bytebuffer
- IOS앱개발
- swift 바이트 버퍼
- SOCKET
- RxSwift
- DeepLink
- mvvm
- swift 소켓 데이터
- 의존성 주입
- ios binary data
- ByteBuffer
- clean architecture
- 클린아키텍쳐
- Dependency Injection
- 유니버셜링크
- 앱출시
- swift 소켓통신
- SWIFT
- iOS 아키텍쳐
- swift 바이너리 데이터
Archives
- Today
- Total
hyunn
면접을 위한 CS 전공지식 노트 - 운영체제 본문
운영체제란?
사용자가 컴퓨터를 쉽게 다루게 해주는 인터페이스이다.
운영체제의 역할
한정된 메모리나 시스템 자원을 효율적으로 분배한다.
1. CPU 스케줄링과 프로세스 관리
2. 메모리 관리
3. 디스크 파일 관리
4. I/O 디바이스(마우스, 키보드 등) 관리
컴퓨터의 요소
컴퓨터는 CPU, DMA 컨트롤러, 메모리, 타이머, 디바이스 컨트롤러 등으로 이루어져 있다.
- CPU
산술논리연산장치, 제어장치, 레지스터로 구성되어 있는 컴퓨터 장치이며, 인터럽트에 의해 단순히 메모리에 존재하는 명령어를 해석해서 실행한다.
* 제어장치 : 프로세스 조작을 지시하는 CPU의 한 부품이다. 입출력장치 간 통신을 제어하고 명령어들을 읽고 해석하며 데이터 처리를 위한 순서를 결정한다.
* 레지스터 : CPU 안에 있는 매우 빠른 임시기억장치이다. CPU는 자체적으로 데이터를 저장할 방법이 없기 때문에 레지스터를 거쳐 데이터를 전달한다.
* 산술논리연산장치 : 산술 연산과 논리 연산을 계산하는 디지털 회로이다.
* 인터럽트 : 어떤 신호가 들어왔을 때 CPU를 잠깐 정지시키는 것이다.
- DMA 컨트롤러
I/O 디바이스가 메모리에 직접 접근할 수 있도록 하는 하드웨어 장치이다.
- 메모리
전자회로에서 데이터나 상태, 명령어 등을 기록하는 장치이다. 메모리가 크면 클수록 CPU가 많은 일을 동시에 할 수 있다.
- 타이머
특정 프로그램에 시간 제한을 다는 역할이다. 시간이 많이 걸리는 프로그램이 작동할 때 제한을 걸기 위함이다.
- 디바이스 컨트롤러
컴퓨터와 연결되어 있는 IO 디바이스들의 작은 CPU를 말한다.
메모리 계층
- 레지스터 : CPU 안에 있는 작은 메모리이다. 휘발성, 속도 가장 빠름, 기억 용량 가장 적음.
- 캐시 : L1, L2 캐시를 지칭한다. 휘발성, 속도 빠름, 기억 용량 적음.
- 주기억장치 : RAM을 지칭한다. 휘발성, 속도 보통, 기억 용량 보통.
- 보조기억장치 : HDD, SSD를 지칭한다. 비휘발성, 속도 낮음, 기억 용량 많음.
캐시
- 캐시는 데이터를 미리 복사해 놓는 임시 저장소이다.
- 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리이다.
웹 부라우저의 캐시
- 쿠키 : 만료기한이 있는 키-값 저장소이다.
- 로컬 스토리지 : 만료기한이 없는 키-값 저장소이며, 브라우저를 닫아도 유지되고 도메인 단위로 저장, 생성된다.
- 세션 스토리지 : 만료기한이 없는 키-값 저장소이며, 탭 단위로 세션 스토리지를 생성하며 탭을 닫을 때 해당 데이터가 삭제된다.
가상 메모리
컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 이를 사용하는 사용자들에게 매우 큰 메모리로 보이게 만드는 것
프로세스
컴퓨터에서 실행되고 있는 프로그램을 말하며 CPU 스케줄링 대상이 되는 작업(task)라는 용어와 거의 같은 의미로 쓰인다.
프로세스의 컴파일 과정
1. 전처리
소스 코드의 주석을 제거하고 #include 등 헤더 파일을 병합하여 매크로를 치환한다.
2. 컴파일러
오류 처리, 코드 최적화 작업을 하며 어셈블리어로 변환한다.
3. 어셈블러
어셈블리어를 목적 코드로 변환한다.
4. 링커
라이브러리 함수 또는 다른 파일들과 목적 코드를 결합하여 실행 파일을 만든다.
프로세스의 메모리 구조
- 스택과 힙
런타임 단계에서 메모리를 동적으로 할당받는 동적 영역이다.
* 스택 : 지역 변수, 매개변수, 실행되는 함수에 의해 늘어나거나 줄어드는 메모리 영역이다. 함수가 호출될 때마다 특정 정보가 스택에 계속해서 저장된다.
* 힙 : 동적으로 할당되는 변수들을 담는다.
- 데이터 영역과 코드 영역
컴파일 단계에서 메모리를 할당하는 정적 영역이다.
멀티프로세싱
여러 개의 프로세스를 통해 동시에 두 가지 이상의 일을 수행할 수 있는 것이다. 하나 이상의 일을 병렬로 처리할 수 있으며, 프로세스 중 일부에 문제가 발생되더라도 다른 프로세스를 이용해서 처리할 수 있다.
스레드
프로세스의 실행 가능한 가장 작은 단위
멀티스레딩
- 프로세스 내 작업을 여러 개의 스레드로 처리하는 기법이다.
- 스레드끼리는 서로 자원을 공유한다.
- 장점
한 스레드가 중단 되어도 다른 스레드는 실행 상태일 수 있기 때문에 중단되지 않은 빠른 처리가 가능하고, 동시성에도 큰 장점이 있다. (동시성은 서로 독립적인 작업들을 작은 단위로 나누고 동시에 실행되는 것처럼 보여주는 것이다.)
- 단점
한 스레드에 문제가 생기면 다른 스레드에도 영향을 끼쳐 스레드로 이루어져 있는 프로세스에 영향을 줄 수 있다.
공유 자원
시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 있는 모니터, 프린터, 메모리, 파일, 데이터 등의 자원이나 변수 등을 의미한다.
임계 영역
둘 이상의 프로세스, 스레드가 공유 자원에 접근할 때 순서 등의 이유로 결과가 달라지는 코드 영역이다.
- 해결 방법
lock 매커니즘을 토대로 한 뮤텍스, 세마포어, 모니터를 사용하여 해결한다.
* 뮤텍스 : lock()을 통해 공유 자원을 잠금 설정하고, 사용한 후에는 unlock()을 통해 잠금 해제한다.
* 세마포어 : wait()을 통해 자신의 차례가 올 때까지 기다리고, signal()을 통해 다음 프로세스로 순서를 넘겨준다.
* 모니터 : 둘 이상의 스레드나 프로세스가 공유 자원에 안전하게 접근할 수 있도록 공유 자원을 숨기고 해당 접근에 대해 인터페이스만 제공한다.
교착 상태
두 개 이상의 프로세스들이 서로가 가진 자원을 기다리며 중단된 상태이다.
- 원인
상호 배제 : 한 프로세스가 자원을 독점하고 있으며 다른 프로세스들은 접근이 불가능하다.
점유 대기 : 특정 프로세스가 점유한 자원을 다른 프로세스가 요청하는 상태이다.
비선점 : 다른 프로세스의 자원을 강제적으로 가져올 수 없다.
환형 대기 : 두 개의 프로세스가 서로가 서로의 자원을 요구하는 상황이다.
- 해결
1. 자원을 할당할 때 애초에 조건이 성립되지 않도록 설계한다.
2. 은행원 알고리즘 (총 자원의 양과 현재 할당한 자원의 양을 기준으로 안정 또는 불안정 상태로 나누고 안정 상태로 가도록 자원을 할당하는 알고리즘) 을 사용한다.
3. 교착 상태가 발생하면 사이클이 있는지 찾아보고 이에 관련된 프로세스를 지운다.
4. 사용자가 작업을 종료할 수 있게끔 '응답 없음' 문구 등으로 알려준다.
스케줄러
CPU 스케줄러는 스케줄링 알고리즘에 따라 프로세스에서 해야 하는 일을 스레드 단위로 CPU에 할당한다.
- 비선점형 방식
프로세스가 스스로 CPU 소유권을 포기하는 방식이며, 강제로 프로세스를 중지하지 않는다.
1. FCFS (First Come, First Served) : 가장 먼저 온 것을 가장 먼저 처리한다. 준비 큐에서 오래 기다리는 현상이 발생하는 단점이 있다.
2. SJF (Shortest Job First) : 가장 짧은 프로세스를 가장 먼저 실행하는 알고리즘이다. 긴 시간을 가진 프로세스가 실행되지 않는 현상이 생길 수 있는 단점이 있다.
3. 우선순위 : 우선순위를 높이는 방법(aging)을 통해 SJF의 단점을 보완한 알고리즘이다.
- 선점형 방식
지금 사용하고 있는 프로세스를 알고리즘에 의해 중단시켜 버리고 강제로 다른 프로세스에 CPU 소유권을 할당하는 방식이다.
1. 라운드 로빈 : 우선순위 스케줄링의 일종으로 각 프로세스는 동일한 할당 시간을 주고 그 시간 안에 끝나지 않으면 다시 준비 큐의 뒤로 가는 알고리즘이다.
2. SRF (Shortest Remaining Time First) : 중간에 더 짧은 작업이 들어오면 수행하던 프로세스를 중지하고 해당 프로세스를 수행한다.
3. 다단계 큐 : 우선순위에 따른 준비 큐를 여러 개 사용하고, 큐마다 라운드 로빈이나 FCFS 등 다른 스케줄링 알고리즘을 적용한다. 큐 간의 프로세스 이동이 안되므로 스케줄링 부담이 적지만 유연성이 떨어지는 특징이 있다.
'Book' 카테고리의 다른 글
면접을 위한 CS 전공지식 노트 - 자료 구조 (0) | 2025.02.28 |
---|---|
면접을 위한 CS 전공지식 노트 - 네트워크 (0) | 2025.02.20 |
면접을 위한 CS 전공지식 노트 - 디자인 패턴과 프로그래밍 패러다임 (0) | 2025.02.17 |