2021. 6. 7. 20:47ㆍCS/운영체제
운영체제란?
운영체제에 대해 알아보기 전에 컴퓨터에 대해서 먼저 알아보겠습니다. 컴퓨터는 흔히들 알고 있듯이 크게 소프트웨어와 하드웨어 두 가지로 분류할 수 있습니다. 또한 컴퓨터란 하드웨어 위에서 컴퓨터 소프트웨어가 실행되는 장치로 볼 수 있습니다.
컴퓨터 종류의 기준으로 나눈다면..
- 개인용 컴퓨터 - 범용
- 대용량 고성능 컴퓨터 - 서버
- 임베디드 컴퓨터
와 같이 나눌 수 도 있습니다.
컴퓨터 하드웨어에 대해 조금 더 다뤄보자면,
- CPU(중앙처리장치)
- 메모리(주기억장치_RAM, 보조기억장치_HDD)
- 입출력 장치(키보드, 모니터 등)
로 구분이 가능합니다.
서버를 운영하기 위해서는 서버 하드웨어가 존재해야 하며, 운영체제가 수행되어야 하고 그 위에 DBMS와 애플리케이션이 실행될 수 있어야 합니다.
이러한 매커니즘에서 운영체제는 다음과 같은 역할을 띄고 있습니다.
- 컴퓨터 하드웨어를 잘 모르더라도 잘 사용할 수 있게끔 서비스를 제공해주는 소프트웨어
- 비싼 하드웨어 자원을 효율적으로 써야하는 이슈가 발생하는데, 자원을 낭비하지 않고 잘 쓰게끔 기능을 제공
운영체제는 컴퓨터 하드웨어와 밀접한 관련이 있기 때문에 기본적인 하드웨어 지식에 대해서 알아보겠습니다.
- CPU
CPU는 메모리에서 수행시킬 명령어를 불러와서 수행하고 다음 번지에 있는 명령어를 읽어서 수행하며 이러한 일련의 사이클을 매우 빠르게 처리합니다.
Register(Program Counter)에서 명령어를 읽어 IR(Instruction Register)에 저장 후 수행시키고 PC 값을 1 증가시켜 다음 번 명령어를 읽어와서 수행하는 동작을 반복하는 것입니다.
(Register는 메모리가 아니라 CPU 내에 있는 저장공간을 의미합니다. 즉, 메모리는 CPU 밖에 있는 저장공간입니다.)
RISC (Reduced Instruction Set Comp.)
> Instruction Set을 소프트웨어로 구현하여 간단함
CISC (Complicated Instruction Set Comp.)
> 하드웨어로 Instruction Set을 구현하여 복잡함 - Memory
폰 노이만 아키텍쳐 vs. 하버드 아키텍쳐
폰 노이만 아키텍쳐 : CPU가 메모리에서 데이터를 읽어들여서 명령어를 수행하고 반복 (일반적인 아키텍쳐)
하버드 아키텍쳐 : 데이터를 가져오는 부분과 명령어를 가져오는 부분을 구분
> CPU가 메모리를 명령어 캐시와 데이터 캐시를 나눠서 사용하면 캐시의 적중률이 높아지기 때문에 하버드 아키텍쳐가 조금 더 좋다고 할 수 있습니다.
> 캐시메모리 : 메모리에 있는 데이터 중에 자주 사용하는 것만 더 빠른 메모리에 가져다 놓고, 다음에 이용할 땐 더 빠른 메모리에서 데이터를 가져오므로 성능 향상을 가져올 수 있습니다. (CPU의 레지스터와 메인 메모리 사이에 위치)
Read 성능이 좋아졌다면 Write의 경우는? 캐시메모리와 메인 메모리 모두 고려해야한다.
- Write-Through: 캐시 메모리에 Write가 발생하면 메인 메모리까지 동시에 Write하는 것
- Write-Back: 캐시 메모리까지 Write하고 나중에 한꺼번에 메인 메모리에 Write하는 것
성능? Write-Through < Write-Back
성능을 보면 Write-Back이 좋은데 그럼 Write-Through은 어디에 사용할까?
- Write-Back을 이용하면 캐시 메모리 내용과 메인 메모리 내용이 달라지게 되는데, 이것들의 일관성을 어떻게 유지할 것이냐 라는 Cache Coherency의 문제가 있고 이를 해결하기 위해서는 다른 매커니즘이 필요합니다.
- RAM - Random Access Memory : 휘발성
- ROM - Read Only Memory : 한 번 Write하면 바꿀 수 없음. 비휘발성
- SRAM - Static RAM : 주변 장치 없이 소자 자체에서 0과 1이 유지되도록 전원이 공급됨. (캐시, 레지스터 등)
- DRAM - Dynamic RAM : 0과 1을 표시하는 소자가 존재하는데 시간이 지나면 0, 1이 없어지므로 주기적으로 업데이트를 해줘야 함. (SRAM에 비해 저렴하며 대용량에 적합) - I/O Device
Secondary Storage - HDD, SSD ...
Storage-Device Hierarchy
Register -> Cache -> Main Memory -> Electronic Disk(USB) -> Magnetic Disk(Hard Disk) -> Optical Disk -> Magnetic Tapes(Data Backup 용)
I/O 디바이스는 애플리케이션 프로그램과 운영체제 레벨에서 어떻게 동작할까?
- Synchronous/Blocking (일반적으로 이 방법이 사용됨)
키보드로 부터 데이터 입력을 받아야 해서 운영체제에게 요청을 하는데 기다리는 동안 다른 일을 수행
입력 이벤트가 발생하여 운영체제가 받아서 애플리케이션한테 전달해주는 매커니즘.
- Asynchronous/Non-blocking
앱이 실행되려면 운영체제로 부터 요청을 한다, 사용자에게 데이터 값을 읽어달라고..
요청을 했는데 앱프로그램은 입력이 돼서 전달될 때 까지 기다리고 있는다.
즉, 키보드에서 데이터가 들어와 동기가 맞을 때 까지 기다리는 것.
Computer-System Operation
- I/O 장치와 CPU가 동시에 수행될 경우가 있습니다. (I/O라는 말은 디바이스와 컨트롤러 사이에 데이터를 주고 받는 것을 의미합니다.)
- 각 디바이스 컨트롤러는 각자의 디바이스를 담당합니다.
- 각 컨트롤러는 로컬 버퍼를 가지고 있습니다.
(디스크에서 데이터를 읽으라고 CPU에서 명령을 내리면, 데이터를 읽어 우선 디스크 컨트롤러에 있는 버퍼에 가져다 놓습니다.) - CPU가 메인 메모리와 로컬 버퍼 사이의 데이터를 이동시킵니다.
- 디스크로부터 실제로 데이터를 읽은 건 버퍼에 들어가 있습니다. CPU가 그 값을 읽어야 하는데 디스크는 데이터의 크기가 크기 때문에 CPU가 아닌 메모리에 가져다 놔야합니다.
그런데 만약 키보드의 경우 입력값이 키보드 컨트롤러의 버퍼에 저장되는데 굳이 메모리보단 CPU에 그냥 읽어들여도 상관없습니다.
이러한 동작을 DMA라고 합니다. 즉, CPU가 관여하지 않고 I/O 장치가 직접 메모리를 Access하는 것입니다. - 디바이스가 CPU에게 작업을 마쳤음을 알려주는 것을 Interrupt라고 합니다.
(디바이스가 작업을 하는 동안 CPU는 다른 일을 수행 중이기 때문에 알려줘야 합니다.)
- Polling : CPU가 다른 일을 하다가 직접 다했는지 물어보는 것. (비효율적_물어보는 것 자체가 오버헤드)
- Hardware interrupt : 일이 다 끝나면 스스로 알려주는 것. (Polling 보다는 효율적)
Interrupt가 걸리면 CPU가 하는 동작?
CPU가 수행하던 일을 멈추고 (메모리에 잠시)저장해둔 후, 발생한 Interrupt의 Interrupt Handler로 점프하여 Interrupt를 처리한 후 다시 수행하던(아까 저장해둔 레지스터) 상태로 돌아가 수행합니다.
Interrupt가 언제 발생하는지?
I/O 장치가 일을 다 했을 때, 또는 I/O 장치가 어떠한 이벤트가 발생하여 알려줄 때 발생합니다.
Exception
CPU가 자기 자신에게 Interrupt 거는 것을 Exception이라고 합니다.
예를들어 CPU 명령어 중에 나누기 명령어가 있는데, 나누는 값이 0이면 나눌 수 없습니다. 즉, 수행할 수 없는 명령어입니다.
이때 CPU가 스스로 처리하기 힘들기 때문에 소프트웨어가 도와줘야하며 CPU를 관리하는 소프트웨어는 운영체제입니다.
따라서 운영체제에게 도움을 받기위해 Exception을 거는 것입니다.
Exception을 하는 경우에는 ..
- 명령어가 이상한 경우
- Page fault, Protection fault -> 참조할 수 없는 경우
- Trap
(예를들면 cin으로 입력 값을 받아야 하는데 입력은 운영체제가 데이터를 받아와줘야 합니다. 즉, 애플리케이션이 수행되고 있다가 운영체제가 수행되어야 하는 것입니다. Hello를 화면에 출력하려면 모니터에 출력해줘야 하는데 이건 애플리케이션이 할 수 없습니다. 운영체제에게 요청해야 하고 그때 실행되는 명령어 입니다.)
'CS > 운영체제' 카테고리의 다른 글
프로그램 / 프로세스 / 스레드 (0) | 2021.07.19 |
---|---|
Virtual Memory & System call (0) | 2021.07.19 |