Programming

[OS] OS의 의미와 역할

JMob 2014. 3. 6. 22:19
728x90
반응형

OS - Operating System

OS(컴퓨터 운영체제) 우리가 사용하는 컴퓨터에 설치되어 있는 소프트웨어이다. 하지만 정말 중요한 역활을 한다. 우리가 주로 사용하는 OS는 WIndows이며 이외에도 Linux, Unix, ios등 여러가지가 있다. 



OS의 역할은 다음의 종류가 있다.

- 사용자와 컴퓨터 시스템간의 인터페이스 정의

- 자원(resurce)관리 

- Device를 사용

- I/O Control 


컴퓨터의 구조는 위의 이미지처럼 되어 있다고 볼 수 있다. Hardware에는 CPU, Memory, I/O Bus 등등이 있다. 우리가 컴퓨터를 사용할 때 이런 하드웨어 장치는 생각하지 않고 사용을 한다. 그렇게 가능하게 하는것이 OS이다.


OS에서 가장 중요한 2가지 역할이 있다.

Resurce allocator : 모든 리소스를 관리한다. 우리가 프로그램을 실행할 때에는 프로그램이 메모리상에 올라가야지 사용할 수 있다. 하지만 우리는 메모리에 어떻게 올라가는지 고려할 필요가 없다. 이를 OS에서 관리해주기 때문이다.


Control program : 컴퓨터는 한번에 여러개의 프로그램을 사용한다. 이때 프로그램들간의 컨트롤 에러를 방지하며 부적절한 프로그램이 실행하는걸 막는다.



Definition

OS는 정확히 무엇이라 정의 하기 어렵다. 그러한 이유는 장치나, 사용 목적에 따라서 역활이 달라지기 때문이다. 하지만 보편적으로 커널(Kernel)이라고 불린다. 이 말은 "컴퓨터가 작동하는동안 계속 돌아가는 프로그램"이란 말이다.




OS가 실행되는 과정

아래 그림은 OS가 실행되는 과정이다.

컴퓨터를 시작하거나 재시작 할 경우 bootstrap program이 실행된다. bootstrap program은 일반적으로 ROM이나 EPROM에 저장되어 있다. bootstrap program은 실행되면 모든 시스템 resurce를 초기화 한뒤 커널을 실행한다. 


Resurce Control이 중요한 이유

컴퓨터에서 모든 연산은 CPU가 담당한다. 하지만 CPU가 처리할수있는 메모르는 Main memory, 즉 RAM에 있는 데이터이다. 따라서 다른 하드웨어나 프로그램들이 작동을 할려면 Main memory에 데이터를 적절하게 올려야하며 이를 CPU에 알려 주어여한다. 이러한 역활 또한 OS가 담당한다.


위의 그림처럼 여러 하드웨어 장치들이 메모리에 적절하게 사용해야 하기 떄문에 이를 컨트롤 해주어야한다. 만약에 메모리 처리를 각 디바이스에서 따로 관리한다고 가정한다면 메모리의 사용 구간이 겹칠 가능성이 있다. 그렇게 된다면 데이터 손실이 일어나서 작동에 문제가 생길 가능성이 크다. 


Kernel Mode Memory & User Mode Memory

OS는 메모리를 커널모드와 유저모드로 나누어서 구분을 한다. 이는 메모리 안정성과 중요한 프로세스의 우선순위를 구분하는 등 많은 이점이 있기 때문이다. 커널 모드 메모리는 OS가 상주하는 메모리 영역이며 유저 모드 메모리는 유저가 사용하는 프로세스들이 사용하는 메모리 영역이된다.



Interrupt

인터럽트는 프로그램을 사용중일때(CPU가 연산중) 하드웨어드으이 장치나 예외상황이 발생하여 처리가 발생할경우 이를 CPU에 알려 처리하는 것이다.


인터럽트는 다음에 좀더 자세히 다룰것이다. 간단히 설명을 하자면 CPU가 일정 부분을 처리하고 있는도중 좀더 중요한 연산이 필요한 순간이 발생했다. 그럴경우 그 중요한 연산부터 처리하는 것이다. 그래서 중요한 연산이 있는 메모리 영역을 처리하는데 그 전에 작업중이던 메모리 위치를 저장하고 처리 완료 후에는 다시 저장된 부분부터 일처리를 하게 된다. 이런 인터럽트를 컨트롤 하는것 또한 OS의 역활이다.

728x90
반응형

'Programming' 카테고리의 다른 글

[OS] Multiprogramming  (0) 2014.03.16
[Security] Register  (0) 2014.03.14
[Algorithm] Lake Counting(POJ No.2386)  (0) 2014.02.18
[Android] Toast로 테스팅 간단히 하기  (0) 2014.02.13
[JAVA] JAVA static 정리  (96) 2014.02.10