컴퓨터는 크게 물리장치(하드웨어)와 프로그램(소프트웨어)으로 나뉘는데, 운영체제란 물리장치를 효율적으로 사용하도록 관리하는 프로그램이다.
물리장치 = 하드웨어 = 시스템자원 = CPU, 메모리, I/O, Disk...
운영체제를 사용함으로써 사용자는 프로그램 실행을 더 쉽게 이용할 수 있고,
컴퓨터 시스템을 더 효율적으로 사용할 수 있게 해준다.
메모리 자원은 한정적이므로 효율적으로 사용해야한다.
운영체제 같은 큰 프로그램이 메모리에 모두 올라간다면 공간부족에 시달리므로 필요한 것만 메모리에 올려 사용하게 된다.
이때 메모리에 상주하는 운영체제에 부분을 커널
이라 한다.
커널
은 운영체제 코드 중 핵심 부분이며 좁은의미로 운영체제라고 할 수도 있다.
운영체제는 크게 인터페이스
와 커널
로 나눌 수 있다.
인터페이스
는 사용자가 커널에 직접 접근할 수 없기에 인터페이스를 통해 커널에 접근할 수 있다. 사용자는 인터페이스를 통해 커널에 명령을 전달하고 인터페이스를 통해 실행결과를 전달받는다. 대표적인 인터페이스로 GUI 와 CLI가 있다.
GUI : 단순명령창이 아닌 아이콘을 마우스로 클릭하는 동작으로 컴퓨터와 상호작용할 수 있다
CLI : 한국에서는 CUI로 잘못알려져 있는데 실제로는 CLI이다. 원하는 명령어를 입력하여 상호작용하는 인터페이스로 대표적으로 '리눅스'가 있다.
커널
은 프로세스, 메모리, 저장장치를 관리하는 핵심기능으로 시스템콜, 드라이버가 있다.
1) 시스템 콜(system call)
커널이 자신을 보호하기 위해 만든 추상화 계층 인터페이스. 하드웨어로 직접적인 접근을 막기위해 시스템콜이라는 시스템 자원 사용과 관련 함수를 제공한다. 이는 프로세서의 기능 중 하나인 인터럽트(Interrupt) 중 하나이다.
modebit
를 이용하여 커널의 접근을 허용한다. ( 유저모드 ⇨ 커널모드 )modebit
를 이용하여 다시 유저모드로 변경한다.컴퓨터는 전자 회로를 이용하여 프로그램과 정보를 전자적 형태로 저장-계산하고, 입력된 데이터를 정해진 프로그래밍에 따라 처리하고 정보로 출력하는 전자 기기로 CPU, DMA컨트롤러, 메모리, 타이머, 디바이스 컨트롤러 등으로 이루어져 있다.
컴퓨터 구성요소로는
연산을 담당하는 CPU
기억을 담당하는 Memory
다양한 입출력 장치
I/O Device 로 구분된다.
중앙처리장치. 기본적으로 연산 담당이다. 인터렙트
에 의해 메모리제 존재하는 명령어를 읽고 실행하며 컴퓨터의 뇌에 해당한다.
구성은 산술논리연산장치(ALU)
제어장치
레지스터
로 되어있다.
산술논리연산장치(ALU)
산술연산, 논리연산을 수행
제어장치
명령을 해석하고 제어신호 전달.
명령어의 실행(Instruction Cycle) 단계 : 인출(Fetch) 단계, 간접(Indirect) 단계, 실행(Execute) 단계, 인터럽트(Interrupt) 단계
레지스터
속도가 매우 빠른 기억장치. 데이터 혹은 주소를 저장하여 연산속도를 향상시키기 위해 사용된다.
CPU의 연산처리
1) 제어장치 : 메모리 또는 레지스터에 계산할 값 로드.
2) 제어장치 : 산술논리연산장치에 레지스터에 있는 값을 계산하라 명령
3) 제어장치 : 결과값을 다시 '레지스터에서 메모리에' 저장
인터럽트 Interrupt
끼어들기,가로막기. 컴퓨터에서 발생한 이벤트를 CPU에 보내는 신호.
인터럽트가 발생하면 CPU는 하던 작업을 멈추고 즉시 인터럽트를 처리해야 한다. 이 과정은 인터럽트를 인터럽트 서비스 루틴 = 인터럽트 핸들러 에 저장함으로써 해결한다. 반대되는 개념으로는 대상을 주기적으로 감시하여 이벤트가 발생하면 해당 처리 루틴을 실행시키는 폴링이 있다.
인터럽트는 그 안에 우선순위가 나뉘고 우선순위에 따라 실행된다.
일단 인터럽트가 접수되면 해당 인터럽트를 인터럽트 서비스 루틴 = 인터럽트 핸들러 의 코드를 찾고 실행에 옮긴다. 인터렙트 핸들링이 종료되면 이전 상태로 복귀한다.
DMA컨트롤러
I/O 디바이스가 메모리에 직접 접근할 수 있도록 하는 하드웨어 장치.
CPU에 너무 많은 인터렙트 요청이 들어와 부하에 걸리는 걸 막아주는 CPU 보조일꾼.
메모리
전자회로에서 데이터나 명령어 등을 기록하는 장치. 보통 RAM을 말한다.
컴퓨터가 실시간으로 사용하는 정보를 저장한다.
컴퓨터 메모리 또는 랜덤 액세스 메모리(RAM)은 시스템 단기 데이터 스토리지로 정보를 빠르게 엑세스 할 수 있도록 컴퓨터가 사용하는 실시간 데이터 정보를 저장하는데 사용된다. 시스템에서 많은 프로그램을 실행할 수록 많은 메모리를 필요로 한다.
이런 한정적인 자원인 메모리를 효율적으로 사용하기 위해 메모리를 필요에 따라 구분했는데 이걸 메모리 계층
이라한다.
메모리를 필요에 따라 여러 종류로 구분해 둔 것을 말한다. 이를 통해 CPU가 메모리에 더 빠르게 접근이 가능하다.
레지스터 : 가장 작은 메모리. 휘발성. 가장 빠른 속도.
캐시 : 휘발성. 속도 빠름. 자주 사용하여 미리 복사해둔 데이터의 임시저장소. 보통 병목현상을 줄이기 위해 캐시를 저장해 둔다. 이를 통해 계산 시간을 줄일 수 있다.
실제 메모리와 CPU사이 속도 차이가 크기 때문에 중간에 레지스터를 두어 간격을 줄인다. 이처럼 속도 차이를 줄이기 위해 계층과 계층 사이의 계층을 캐싱계층이라고 한다.
ㅡ
캐싱계층 없이 캐시를 직접 설정하기 위해선 시간지역성
과 공간지역성
을 기반으로 설정해야한다.
시간지역성
최근 사용한 데이터에 다시 접근하려는 특성
공간지역성
최근 접근한 데이터나 가까운 데이터 공간에 접근하려는 특성
ㅡ
캐시에서 원하는 데이터를 찾으면 캐시히트
캐시에 원하는 데이터가 없으면 캐시미스
캐시가 히트 되기 위해 정보를 받는 방법을 캐시매핑
이라고 하며
공간이 작은 레지스터를 캐시 계층으로써 효율적으로 사용하기 위한 방법이다.
ㅡ
웹 브라우저
의 캐시
쿠키
만료값이 있는 키-값 저장소. 4kb 용량. 만료기간 지정 가능. 쿠키설정 시 document.cookie로 쿠키를 가리는 httponly 옵션을 거는게 중요. 클라이언트 또는 서버에서 만료기한 설정이 가능하다.(보통 서버에서 지정)
로컬스토리지
만료기간이 없는 키-값 저장소. 10mb용량. 브라우저를 닫아도 유지. 도메인 단위의 생성-저장.
세션스토리지
만료기한이 없은 키-값 저장소. 5mb용량. 탭을 닫으면 데이터 삭제.
ㅡ
데이터베이스
의 캐시
데이터 베이스를 구축할 때도 메인 데이터 베이스 위에 레디스(redis)
를 캐싱 계층으로 두어 성능을 향상 시키기도 한다.
운영체제의 대표적인 역할. 한정된 자원인 메모리를 효율적으로 활용해야 한다.
메모리는 프로세스가 메모리 주소를 직접 참조하는 것이 아니라 프로세스의 주소공간과 메모리의 주소공간을 연결하여 사용하기 때문에 빠르게 메모리 참조(논리 주소와 물리주소를 연결하는 것) 하는 것이 필요하다. 이를 위해 가상 메모리를 사용한다.
가상메모리
물리 메모리 크기의 한계를 극복하기 위한 것. 주기억장치와 보조기억장치 등 모든 메모리 자원을 추상화 하여 프로세스 처리 시 실제로 사용하는 데이터는 메인 메모리(RAM)에 저장하고 나머지 데이터는 보조기억장치로 이동하여 남은 RAM을 사용할 수 있게 만드는 방법.
스와핑 swapping
RAM에서 당장 사용되지 않은 데이터는 보조기억장치로 옮겨지는데 이중 데이터 일부를 보조기억장치에서 끌어다 쓰는 방식을 스와핑 이라고 한다. 이는 페이지폴트를 방지하는 방법으로 사용된다.
페이지폴트(pageFault)
프로세스의 주소 공간에는 존재하지만 지금 RAM에는 없는 데이터에 접근했을 때 발생하는 현상.
스레싱 thrashing
메모리에 많은 프로세스가 동시에 올라가게 되면 스와핑이 일어나고 이는 페이지폴트율을 높여 성능저하를 초래한다.
이를 해결하기 위해서는 메모리를 늘리거나 ssd를 사용하는 방법이 있고,
운영체제에서는 작업세트와 PFF 방식이 있다.
작업세트
지역성에 따른 프로세스가 사용한 데이터들을 묶은 페이지 집합을 만들어 미리 메모리에 로드해 두는 것.
PFF(Page Fault Frequency)
프레임의 상한선과 하한선을 정해 상한선 도달 시 프레임을 늘리고 하한선 도달 시 프레임을 줄이는 방법.
프레임(frame) 실제 메모리를 사용하는 최소단위.
메모리 할당
프로그램을 메모리에 할당할 때 시작 메모리 위치, 할당 메모리의 크기를 기반으로 할당하는데 연속할당과 불연속할당으로 구분된다.
홀(hole) 할당할 수 있는 비어있는 메모리 공간
페이지 교체 알고리즘
스와핑의 발생율이 적어야 메모리를 효율적으로 이용하는 것이다. 페이지 교체 알고리즘을 어떻게 설계하느냐에 따라 스와핑 발생율이 조절된다.
프로세스는 컴퓨터에서 실행중인 프로그램을 말한다.
스레드는 프로세스 내 작업 흐름을 말한다.
프로그램이 메모리에 올라가면 인스턴스화 되고 이후 cpu 스케쥴러에 따라 cpu가 프로세스를 실행한다.
프로그램 -> 프로세스 -> 스레드
인스턴스화 : 시스템 자원을 최적화하기 위한 사용자 지시 프로세스
프로그램이란 컴파일 과정을 거쳐 기계어로 번역되어 컴퓨터가 실행할 수 있는 파일이 되는 것을 말하며, 컴파일 과정은 다음의 흐름으로 진행된다.
a. 운영체제란 무엇인가요?
b. 운영체제의 역할은 무엇인가요?
c. 알고 있는 운영체제 예시를 말씀해주세요
d. 컴퓨터 부팅 시 운영체제의 실행과정을 설명 할 수 있나요?
BIOS (Basic Input/Output System) 하드웨어 장치와 OS 사이에 위치하여 운영체제(OS)가 하드웨어의 I/O를 제어할 때 BIOS를 통해 제어하게 된다. 펌웨어 라고도 함.
부팅우선순위(Boot Order Priorities)에 따라 부팅할 보조기억장치를 찾는다.
POST 과정에서 오류가 생기면 경고음 발생(삡-삡-삡)
MBR(Master Boot Record) Disk의 첫 섹터
부트로더(Boot Loader) 운영체제 코드를 읽어와 메모리에 저장시키는 역할
a. 운영체제란 무엇인가요?
b. 운영체제는 어떤 구조로 이루어져 있나요?
c. 커널의 시스템 콜에 대해 설명하실 수 있나요?
d. 시스템 콜은 프로세서의 인터럽트 중 하나입니다. 인터럽트가 뭔지 설명하실 수 있나요?
프로세스와 스레드를 설명해주세요
프로세스를 실행하다가 오류가 발생해서 강제로 프로세스가 종료된다면 다른 프로세스는 어떤 영향을 받을까요? 그럼 스레드가 강제 종료된다면 다른 스레드는 어떤 영향을 받을까요?
멀티스레드를 설명해주세요.
PCB가 뭔가요?
참고
운영체제
https://eclipsemode.tistory.com/71
https://chanhuiseok.github.io/posts/cs-1/
https://kjhoon0330.tistory.com/entry/운영체제OS-운영체제란-무엇인가
https://velog.io/@msg016/운영체제-기본개념-인터럽트
컴퓨터요소
https://cloudstudying.kr/lectures/183
https://cozy-dandelion.tistory.com/7
https://ko.wikipedia.org/wiki/인터럽트
메모리
http://itnovice1.blogspot.com/2019/09/cache.html
https://velog.io/@yu-jin-song/CS-메모리-계층-구조
https://ko.wikipedia.org/wiki/메모리_계층_구조
https://beeehappy.tistory.com/m/53
https://velog.io/@sawol/메모리-관리
https://velog.io/@tjdud3550/CS-운영체제
프로세스와 스레드
https://velog.io/@raejoonee/프로세스와-스레드의-차이