본문 바로가기

STUDY/운영체제

about operating system

운영체제 operating system

: 컴퓨터 하드웨어와 응용 프로그램 사이에서 하드웨어를 효율적으로 관리하여 사용자의 편리함을 높여줌

  • resource allocater (자원 할당자): 특정 프로그램과 사용자의 작업에 필요한 하드웨어 자원을 할당해줌
  • control program (통제 프로그램): 사용자 프로그램이나 입출력 장치의 실행을 관리, 즉 통제하여 오류나 부적절한 실행을 방지한다.

 

computer system의 구성 요소

  • 하드웨어: I/O device(입출력 장치), memory(기억 장치), CPU(중앙 처리 장치)
  • 운영체제
  • 응용 프로그램
  • 사용자 user

system program + kernel = 운영체제

-> 이때의 system program은 컴퓨터를 사용하기 위해 필수적인 프로그램들을 의미하며 운영체제를 설치하면 같이 설치됨 (ex. 윈도우 탐색기)

 

 

운영체제는 resource manager

= hardware, I/O device, memory 같은 하드웨어 자원을 효율적으로 관리함

이를 수행 하는 방법

  • obstraction 추상화: 세분화하지 않고 하나의 큰 개념을 적용 ex) 삼성 헤드폰, LG 헤드폰 말고 그냥 '헤드폰'
  • sharing 공유: time multiplexting-> 컴퓨터 하나에 여러 사용자가 동시에 접속해서 사용자는 자신이 컴퓨터를 독점하고 있다고 느끼게 해줌/ space sharing -> 특정 프로세스에서 쓰는 자원을 다른 곳에서도 쓸 수 있도록 함
  • protection 보호: 특정한 사용자가 하드웨어에 접근할 수 없도록 막아줌 (security의 개념이 아님)
  • fainess: 어떤 프로세스가 CPU를 독점적으로 사용하는 것을 막음
  • performance: 성능을 최고수준으로 끌어올려 사용함

=> 결국 하드웨어 자원을 관리해서 소프트웨어의 효율적인 실행 환경을 제공해줌

 

system software layer

Computer System Architecture: 하드웨어 자원

Operating System ==kernel: 운영체제

Software Development Environment: system programe들

Middleware: 운영체제와 상관없이 프로그램이 돌아가도록 사용자와 운영체제 사이에서 관리한다. 프로그램 개발을 쉽게 해주는 중간 sw

User Application: 사용자 프로그램이다. 하드웨어의 자원을 쓰려면 운영체제의 도움이 필요함


Computer System Architecture, 하드웨어 구조

: cpu는 연산이 빠른것에 비해 I/O장치들은 연산이 느림. 따라서 throughput을 높이기 위해서 각각의 I/O 장치마다 controller를 통해서 처리 효율을 높인다. 따라서 I/o 장치와 cpu가 concurrently하게 연산할 수 있는것임. 각각의 I/O 장치들은 local buffer가 있는데 cpu는 main memory와 local buffer 사이에서 전달하고 I/O 장치들은 local buffer에 데이터를 저장한다.

이때 I/O 장치들은 interrupt를 발생시켜 cpu에게 연산이 끝났음을 알려준다.

 

kernel이 I/O 작업이 끝났음을 알게되는 방법은

- polling

- HW hardware interrupt

두가지 방식이고 hardware interrupt가 여기서 말하는 interrupt이다.


CPU

register: cpu 안의 저장공간이다.

- pc(program counter): 다음에 실행할 명령어의 주소

- instruction register: 명령어의 해석을 위해 저장

- psw(program status word): 현재 cpu의 상태를 나타냄

- general purpose register: 데이터 기억이나 일반적인 연산을 함

 

instruction architecture set

- RISC: 명령어의 갯수를 중리고 복잡한 명령어는 sw로 만드는 것이다.

- CISC: 복잡한 명령어의 집합이다.

따라서 당연히 처리속도는 RISC가 더 좋다. 복잡할 수록 시간이 오래 걸리니까

 

pipelining

- Fetch, Decode, Execute, Write back

 

instruction-level parallelism (ILP)

- 파이프라인은 처리량을 높이는 것이다. 즉 동시에 실행시키는 것이 아니라 놀고있지 않도록 만드는 것이다. 반면에 instruction-level parallelism은 명령어를 동시에 실행시키는 것이다.

-> superscala(cpu가 동적으로 여러개를 실행) vs VLIW (컴파일러가 어떤 것을 실행할지 미리 결정)

-> SMT

 


Storage Structure

main memory

- SRAM: static. => cache 메모리로 활용한다.

- DRAM: dynamic. => refresh 즉 항상 새로고침을 해야 내용이 유지된다. 대용량 메모리에 사용된다.

 

compact flash card internals, SSD

여기서 SSD = solid state drive

플래시 메모리 기반이기 때문에 hard disk 보다 빠르다.

controller + flash memory 로 이루어져있다.

 

Storage Device Heirarchy

caching

지역성을 활용하여 최근에 읽은 데이터에 대해 빠르게 가져온다.

읽는 것은 그렇다 쳐도 쓸때는 어떻게 해야할까?

 

cache management policy

- write-back: cache에 썼다가 나중에 한번에 main memory에 write함. 성능은 좋은데 데이터 불일치가 발생한다.

- write-through: main memory와 cache에 동시에 쓴다. 안전하지만 느리다.

 


I/O structure

ex. 키보드 마우스 스피커 등등 모두가 입출력장치이다.

I/O 장치가 수행되는 동안에는 cpu는 waiting 상태가 되고, 수행이 끝나면 cpu에게 완료를 알려준다.

이때 이벤트를 주고 받는 것을 interrupt라고 한다.

 

interrupt의 두가지 방식

- polling: 지속적으로 cpu에게 작업이 완료되었는지 물어본다. 당연히 오버헤드가 크다.

- hardware interrupt: 장치에서 interrupt를 건다.

하드웨어 관점에서의 I/O control

1. device interrupt가 발생한다.

2. cpu는 process 작업을 중단하고 cpu에서 쓰던 레지스터 집합을 memory에 저장한다. 그 후 kernel mode로 전환한다.

3. interrupt가 발생한 handler로 가서 작업을 수행한다.

4. 다시 돌아와서 저장했던 레지스터의 내용을 복원하고 user mode로 전환한 후 다시 작업을 계속 진행한다.

 

소프트웨어 관점에서의 I/O control

- synchronous: interrupt가 발생하면 blocking, 즉 current 작업을 멈춘다.

- Asynchronous: interrupt가 발생해도 non-blocking 한다.

 

Interrupt vs Exception

Interrupt: I/O 장치가 cpu에게 거는 interrupt

Exception: cpu가 자기 자신에게 거는 Interrupt => trap or fault

 

예를 들면 5 divide 0 는 수행할 수 없으므로 운영체제에게 도움을 요청하고 cpu가 자기자신에게 interrupt, 즉 exception을 건다. 근데 요새는 그냥 ANR 하고 넘어간다.

또는 참조할 수 없는 메모리를 참조했을 때에도 exception이다. 리눅스 하다보면 많이 보이는 segmentation fault이다.

 

exception은 다시 trap과 fault로 구분된다.

- trap: expected. 즉 의도적으로 거는 exception이다.

- fault: unexpected. 예상치 못하게 수행하던 일을 마치지 못하면 fault handler가 작동한다.

 

그렇다면 i/o 들은 데이터를 어떻게 메모리에 로드할까?

I/O가 데이터를 메모리에 올려두는 방법

DMA: 하드디스크에서 직접적으로 메모리에 access해서 데이터를 올리는 방식이다.

즉 I/O에서 바로 main memory로 이어지기 때문에 cpu를 거치지 않고도 접근 가능하여 빠르게 수행 가능하다.

 


Hardware Protection

: not security. protection 

즉 공격을 막는 것이 아니라 접근을 제한하는 것이다.

I/O protection, memory protection, cpu protection 등이 있다.

 

- I/O protection: 프로그램이 I/O 장치를 고장내거나 독점하는 것을 막는다.

- memory protection: 운영체제에 실행하고 있는 프로세스가 자신에게 할당된 것 외의 메모리 공간을 접근하는 것을 막는다. 

- cpu protection: 한개의 프로그램이 cpu를 독점하는 것을 막는다.

 

I/O protection - Dual-Mode operation

: 예상치 못한 상황에서 system을 보호하기 위함이다.

user mode, kernel mode 두가지이다.

 

- user mode: 사용자 모드 즉 사용자 프로그램이 실행되는 모드이다.

- kernel mode: system mode, monitor mode, 즉 운영체제가 실행되는 모드이다.

user mode에서 불법적인 명령어를 감지하는 경우 interrupt를 걸고 kernel mode로 전환한다.

user는 user mode에서 프로그래밍을 한다. 이때 kernel mode로 넘어가야 프로그램을 하드웨어를 사용할 수 있는데, kernel mode로 전환은 어떻게 할까?

 

system call

: 내부의 프로세스가 되는 코드이기 때문에 이는 exception, 그 중에서도 trap에 해당한다.

 

read() 라는 system call을 사용한다면 현재 프로그램의 데이터를 저장하고 kernel mode로 진입하고, os의 trap handler가 이를 처리한다. 즉 운영체제의 도움을 받아 하드웨어를 사용할 때 sys call을 사용하는 것이다.

 

memory protection

: 정해진 메모리 영역만 사용하여 다른 프로세스에게 영향이 가지 않도록 보호한다.

base register~limit register 까지만 접근을 허용하고 이를 넘어가는 경우에는 Interrupt를 걸어서 막는다. 

대표적인게 segmentation fault

 

cpu protection

: cpu를 독점하지 못하도록 보호한다.

 

Timer interrupt

- specific period 가 지나면 주기적으로 interrupt를 걸도록 한다. 이때 running 상태이던 process는 ready queue로 보내진다.

- for time sharing

- load-timer is a priviledged instruction이다. 즉 os만 load가능하다.

 


 

'STUDY > 운영체제' 카테고리의 다른 글

synchronization  (0) 2021.12.02
process scheduling  (0) 2021.12.01
multi-thread programming  (0) 2021.11.30
process concept  (0) 2021.11.29
os system structure  (0) 2021.11.28