💡 운영체제란 ?
운영 체제는 컴퓨터 하드웨어가 컴퓨터 소프트웨어와 통신하고 작동하도록하는 소프트웨어 프로그램이다.
💡운영체제의 주요 목적은?
운영 체제에는 두 가지 주요 목적이 있다.1. 컴퓨터 시스템의 계산 활동을 관리하여 컴퓨터 시스템이 제대로 작동하도록 한다.2. 프로그램 개발 및 실행을 위한 환경을 제공한다.
💡 프로세스와 스레드란?
프로세스는 실행 중인 프로그램을 말하며, 완벽히 독립적
이기 때문에 메모리 영역(Code, Data, Heap, Stack)을 다른 프로세스와 공유하지 않습니다. 프로세스는 최소 1개의 쓰레드(메인 쓰레드)를 가지고 있다.
쓰레드는 프로세스 내에서 Stack만 따로 할당 받고, 그 이외의 메모리 영역(Code, Data, Heap)영역을 공유
하기 때문에 다른 쓰레드의 실행 결과를 즉시 확인할 수 있습니다. 쓰레드는 프로세스 내에 존재하며 프로세스가 할당받은 자원을 이용하여 실행된다.
💡 프로세스 제어 블록의 역할은?
프로세스를 관리하기 위해 필요한 프로세스 요소들의 자료구조
- 프로세스 식별자(Process ID)
- 프로세스 상태(Process State) 등..
💡 멀티 프로세스와 멀티 스레드의 특징
멀티 프로세스는 하나의 프로세스가 죽어도 다른 프로세스에 영향을 끼치지 않고
계속 실행된다는 장점이 있지만 멀티 쓰레드보다 많은 메모리 공간과 CPU 시간을 차지한다는 단점이 있다.
멀티 쓰레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 문맥 전환이 빠르다는 장점이 있지만하나의 쓰레드에 문제가 생기면 전체 쓰레드가 영향
을 받으며 동기화 문제도 있다는 단점이 있다.
💡 멀티 프로세스 대신 멀티 스레드를 사용하는 이유는?
💡 자바 스레드란?
💡 멀티 스레드의 동시성과 병렬성 설명
💡 동기와 비동기
동기는 순차적, 직렬적으로 테스크를 수행하고,비동기는 병렬적으로 테스크를 수행합니다.
예를 들어, 서버에서 데이터를 가져와서 화면에 표시하는 작업을 수행할 때,동기는 서버에 데이터를 요청하고 데이터가 응답될 때까지 이후 테스크들은 블로킹(Blocking, 작업 중단)됩니다.비동기는 서버에 데이터를 요청한 이후 서버로부터 데이터가 응답될 때까지 대기하지 않고(Non-Blocking) 즉시 다음 테스크를 계속해 수행합니다.
💡 블럭킹과 논블럭킹
- 블로킹
은 A 함수가 B 함수를 호출하면, 제어권을 A가 호출한 B 함수에 넘겨준다. - 논블로킹은 A함수가 B함수를 호출해도 제어권은 그대로 자신이 가지고 있는다.
💡 컨택스트 스위칭이란?
멀티프로세스 환경에서 CPU가 어떤 프로세스를 실행하다 인터럽트에 의해 다른 프로세스를 실행해야 할 때 현재 프로세스 정보를 레지스터 등에 저장하고 실행해야할 새로운 프로세스 정보로 변경하게 되는데 이를 컨텍스트 스위칭이라고 합니다
이때 컨택스트들을 저장하고 잇는 것들을 프로세스 제어 블록 PCB라고 한다.
- PCB는 다음의 정보들을 저장한다.
- 프로세스 상태 : 생성, 준비, 수행, 대기, 중지
- 프로스램 카운터
- 레시스터
- 프로세스 번호
- 스위칭이 일어나는 경우
- I/O interrupt
- CPU 사용시간 만료
- 자식 프로세스 Fork
- 인터럽트 처리를 기다릴 때
- 스레드의 경우, 공유(데이터) 영역이 많음 → 컨텍스트 스위칭이 빠름
- 프로세스의 경우, 공유 데이터가 없음 → 새로운 캐시 정보를 쌓아야하는데 부담되는 요소
💡 인터럽트란 무엇인가?
인터럽트란 CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때 사용할 수 있는 기능이다.
CPU에 인터럽트가 걸리면 CPU는 현재 수행하던 작업에 대한 정보를 저장한 후 인터럽트 서비스 루틴(ISR)을 수행한다.
인터럽트 처리를 마치면 이전에 수행하던 작업을 진행한다.
인터럽트는 크게 두개로 나뉜다.
1) 외부 인터럽트 : 입출력 장치, 타이밍 장치, 전원 등의 외부적인 요인에 의해서 발생
2) 내부 인터럽트 : 잘못된 명령이나 데이터를 사용할 때 발생하는 인터럽트
💡 인터럽트가 필요한 이유는?
선점형 스케줄러
를 예로 들면 프로세스가 Running 중에 스케줄러에 의해 중단되게 된다.
→ 이유는 다른 프로세스로 교체하기 위함인데, 이때 프로세스가 스스로 중단할 수 없다. 따라서 스케줄러를 강제로 중단시킬 수 있는 것이 인터럽트이다.
💡인터럽트 처리과정은?
💡 시스템콜이란?
운영체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.
해당 기능으로는 프로세스 생성, 관리, 메인 메모리 관리, 파일 관리 등이 있다.
💡 교착상태란?
교착 상태란 자원을 소유한 스레드 사이에서, 각 스레드가 다른 스레드가 소유한 자원을 요청하여 모든 스레드가 무한정 대기하는 현상을 말한다.교착상태의 4가지 조건은 다음과 같다.
- 교착상태 4가지 조건
상호배제 : 매 순간 하나의 프로세스만 자원을 사용 가능하다
점유대기 : 프로세스가 할당된 자원을 가진 상태에서 다른 자원 기다림
비선점 : 프로세스가 어떤 자원의 사용을 끝날 때까지 그 자원을 뺏을 수 없음
순환대기 : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 갖고 있음
→ 모든 프로세스들의 자원을 갖고 기다리니까 진행되지 않음
- 데드락을 막는 방법
- 데드락이 발생하지 않도록
예방
(prevention) 하기 - 데드락 발생 가능성을 인정하면서도 적절하게
회피
(avoidance) 하기 - 데드락 발생을 허용하지만 데드락을
탐지
(detection)하여, 데드락에서 회복하기
💡 경쟁상태란?
공유자원에 여러 프로세스가 접근해서 데이터의 일관성을 해칠수 있는 상태를 의미한다
경쟁 상태도 교착 상태의 종류 중 하나이다.
- 발생하는 경우
- 커널모드에서 데이터를 로드하여 작업을 하던 도중 인터럽트가 발생하여 같은 데이터를 조작하는 경우에 발생할 수 있다. → 커널모드에서 작업을 수행하는 동안 인터럽트를 disable 시켜놓으면 됨
💡 프로세스 스케줄링
CPU를 사용하기 위한 프로세스들의 우선순위를 관리하고 그에 맞게 처리하는 일을 의미 한다
이러한 스케줄링은 크게 장기, 중기, 단기 세 꼭지로 나눈다
- 장기 스케줄링
- 어떤 프로세스가 CPU를 차지할 수 있는지 결정해서 Ready Queue에 보내는 작업을 뜻한다. 간단하게
어떤 프로세스를 커널에 등록
할 것인지 정하는 작업이다 - 중기 스케줄링
어떤
프로세스들이 메모리를 할당 받을 것인지 결정하는 작업 (이러한 프로세스가 많은 경우 과부하 방지를 위해서 프로세스를 일시적으로 정지시키면서 관리함 )- 단기 스케줄링
언제
cpu를 할당할 것인지 결정하는 작업.
💡 스케줄링 발생 시점
- running → waiting : 보통 I/O 요청이 일어나거나 자식 프로세스가 종료 대기 할 때 → 비선점형
- running→ ready : 인터럽트가 발생됐을 때 → 선점형
- waiting → ready: I/O가 완료 되었을 때 → 선점형
- running → terminate: 프로세스가 완전히 종료 되었을 때 → 비선점형
💡선점형과 비선점형 스케줄링의 차이점
- 선점형
- 어떤 프로세스가 CPU 를 할당받아 실행되고 있는 중에 다른 프로세스에 의해 언제든 점유를 뺏길 수 있음
- 문맥교환 오버헤드가 크며
- 대화형 시스템, 리얼타임 시스템에 적합
- 우선순위가 높은 프로세스들만 들어오는 경우, 오버헤드 발생
- 비선점형
- 문맥교환 오버헤드가 적으며
- 일괄처리 시스템에 적합
- 하나의 프로세스가 오랫동안 CPU를 잡는경우도 있어서 처리율이 낮아짐
- 선점형과 반대로 다른 프로세스가 절대 CPU를 뺏을 수 없음
💡 세마포어와 뮤텍스(상호배제)의 공통점과 차이점
: 상호배제 조건을 해결하기 위한 방법인 뮤텍스와 세마포어
임계구역에 대한 접근을 막기 위해 Locking 메커니즘이 필요한데
- 공통점
- 병행 처리하는 프로세스 동기화 기법
- 차이점
- 세마포어는 뮤텍스가 될 수 있지만 뮤텍스는 세마포어가 될 수 없다
- 세마포어는 소유할 수 없는 반면, 뮤텍스는 소유가 가능하다
- 뮤텍스는 임계구역에 하나의 스레드만 접근 가능
- 세마포어는 임계구역에 여러 스레드가 접근 가능
- 세마포어는 카운터를 두어서 동시에 자원에 접근할 수 있또록 스레드 수를 제어함
💡 메모리 단편화란?
메모리 단편화는, 메모리(RAM)의 공간이 여러 작은 공간으로 나뉘어져 사용되는 바람에 전체로 봤을 때 충분히 사용 가능한 메모리가 있음에도 불구하고 할당을 못하는 상태
💡 외부 단편화와 내부 단편화는 무엇인가
- 내부 단편화
메모리를 할당하는 최소 블록의 크기에 비해 작업에 필요한 메모리의 양이 작은 경우,남은 공간
이 생겨 메모리를 낭비하게 되는 상황 - 외부 단편화
- 메모리 할당 / 해제 작업이 계속 진행될 때, 중간중간 사용 가능한 공간이 많이 존재해서 전체적으로 사용 가능한 메모리의 양은 충분하나 실제로 메모리를 할당할 수 없는 상태
💡 페이징이란?
외부 단편화를 해결하는 기법으로
프로세스의 주소 공간을 페이지(page)란 단위의 고정된 사이즈
로 나누어 물리적 메모리에 불연속으로 저장
하는 방식 → 동적할당의 형태
💡 세그멘테이션이란?
내부 단편화를 해결하는 기법으로
가상 메모리를 서로 크기가 다른 세그멘트(Segment)를 논리적 단위로 분할해 사용하는 기법
→ 크기가 일정하지 않고 다양하기 때문에 hole이 발생해서 외부 단편화가 발생 → 메모리 낭비
💡 캐시란?
연산에 필요한 데이터, 값을 미리 갖다놓는 임시 메모리. CPU에서 메인 메모리와 디스크 까지 도달하는데에 cost가 커서 cpu 바로 옆에 딱 달라붙어있기 때문에 cpu에서 접근 코스트가 매우 적어서 성능 향상에 좋음. 하
'CS' 카테고리의 다른 글
[DB] 락(Lock)이란? (0) | 2022.09.08 |
---|---|
[DB] 💡레디스(Redis)란? (0) | 2022.09.08 |
[OS] 페이징과 세그멘테이션 (0) | 2022.08.30 |
[OS] 페이지 교체 알고리즘 (0) | 2022.08.30 |
[OS] 시스템 호출(System calls) (0) | 2022.08.30 |