본문 바로가기

컴퓨터 프로그래밍/Computer Science

[운영체제] 운영체제의 목적 - 반효경 교수님 OS

● 운영체제 목적

1) 컴퓨터 시스템의 한정된 자원을 효율적으로 관리하기 위함이 가장 큰 목적(효율성)

2) 특정 사용자/프로그램의 지나친 불이익이 발생하지 않도록 하기 위함(형평성)

3) 사용자 및 운영체제 자신의 보호 

 

* 컴퓨터를 켤때 부팅 된다고 하는데 이는 운영체제(OS)가 컴퓨터 메모리에 올라가서 실행이 되는 것을 의미한다.

(운영체제는 컴퓨터가 꺼지기 전까지 계속해서 실행됨)


● 컴퓨터 시스템 구조

[ CPU ] 

① CPU의 역할

- 명령어 해석과 실행 : 컴퓨터의 프로그램에서 명령어를 읽고 해석하여 실행 한다. 

- 데이터 처리 : 산술연산과 논리 연산을 수행할 수 있다. 

- 주기억장치 접근 : 주기억장치인 메인메모리에서 데이터를 읽거나 쓸수 있다. 이는 프로그램의 명령어나 데이터를 가져와 작업을 수행하고 결과를 다시 주기억장치에 저장할 수 있다. 

- 입출력 제어 : 주변 장치와 데이터를 주고받아 프로그램 실행에 필요한 입력과 출력을 처리한다. 

- 프로그램 제어 : 분기, 점프, 서브루틴 호출 등의 명령어를 실행하여 프로그램의 다양한 부분으로 이동하거나 조건에 따라 실행을 변경할 수 있다. 

 

② CPU의 작업 환경

-  CPU는 I/O 장치들에게 직접적인 접근이 어려워 I/O컨트롤러에게 요청하여 Device에 접근하게 된다. 

-  메모리에서 Instruction을 읽어서 실행하는 용도(기계어 읽음)이다.

-  CPU안에는 메모리보다 빠르면서 정보를 저장할 수 있는 공간이 있다 이를 "레지스터"라 부른다.

-  CPU스케줄링은 어떤 프로그램에게 CPU 사용권을 줄까? 얼마간 사용하게 할 것이냐를 컨트롤

-  CPU는 하드웨어이기 때문에 메모리에서 기계어를 읽어서 사용하게 된다. 

 

③ CPU의 구성

ALU(산술논리 연산장치) : 비교, 판단, 연산을 담당한다. 

 

CU(제어부와 내부버스) : 명령어의 해석과 올바른 실행을 위해 CPU를 내부적으로 제어하고 스케줄링 함

제어부란?

주기억 장치에 저장되어 있는 명령어를 순서대로 호출하여 해독하고, 제어신호를 발생시켜 컴퓨터의 각 장치를 동작하도록 하는 장치이다. 

 

내부버스란?

기억, 연산, 제어 기능을 실현하기 위한 CPU와 주기억 장치, 입출력 장치, 외부 기억 장치, 주변 장치, 통신 처리 장치 등의 제어부 사이를 연결하는 버스 

 

메모리유닛(레지스터&캐시메모리) 

레지스터란?

처리할 명령어를 저장, 용도에 따라 범용 레지스터와 특수목적 레지스터로 구분됨 

 

* 범용 레지스터 : 연산에 필요한 데이터나 연산 결과를 임시로 저장함 

* 특수목적 레지스터 : 특별한 용도로 사용하는 레지스터로서 여러 레지스터가 존재한다. 

 

[특수목적 레지스터의 종류] 

1. 메모리 주소 레지스터(MAR) : 읽고 쓰기 위한 주기억장치의 주소를 저장

2. 프로그램 카운터(PC) : 다음에 수행할 명령어의 주소를 저장

3. 명령어 레지스터(IR) : 현재 실행 중인 명령어를 저장

4. 메모리 버퍼 레지스터(MBR) : 주기억장치에서 읽어온 데이터나 저장할 데이터를 임시로 저장

5. 누산기(AC) : 연산결과를 임시로 저장 

6. 인덱스 레지스터 : 메모리 주소 계산에 사용되는 레지스터로 상대 주소 지정이나 배열 요소 접근에 활용

7. Mode bit : CPU의 운영 모드를 나타내는 비트로, CPU가 현재 사용하는 운영모드를 나타내는 신호라고 생각하면 된다. 

운영 모드는 CPU가 작동하는 방식을 결정하게 되며 사용자 모드와 커널 모드 등이 존재한다. 

 

- Mode bit을 통해 하드웨어적으로 두 가지 모드의 operation지원

1) 1(사용자모드) - 사용자 프로그램 수행

2) 0(모니터모드, 커널모드, 시스템모드) - OS 코드 수행

 

- 보안을 해칠 수 있는 중요한 명령어는 모니터 모드에서만 수행이 가능한 "특권 명령"으로 규정

1) Interrupt나 Exception 발생 시 하드웨어가 mode bit을 0으로 바꿈

2) 사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1로 세팅 

 

※ 이외에도 레지스터 종류는 다양함 

 

캐시 메모리(L1)란?

메인메모리의 빈번한 접근으로 인한 처리 속도 지연을 개선하기 위해서 레지스터 다음에 위치하여 CPU의 처리속도를 높여주는 역할을 담당한다. 

 

* Interrupt line 

주기억 장치나 입출력 장치와 상호작용 하는 CPU에게 예기치 않은 상황이 발생하거나 우선순위가 높은 작업이 발생하여 CPU에게 주의를 요하는 경우가 생겨나게 된다. 이때 하드웨어 장치나 소프트웨어는 인터럽트 신호를 발생시켜 CPU에게 주의를 줄 수 있게 된다. 인터럽트 신호는 인터럽트 라인을 통해 CPU에게 전달되며 인터럽트 라인은 CPU와 하드웨어 장치 간의 중요한 통신 경로로서 시스템의 성능과 응답성을 향상 시키는데 중요한 역할을 한다. 

인터럽트 신호를 통해 CPU는 주기적으로 중요한 작업에 집중하고, 필요한 경우에만 다른 작업으로 전환하여 효율적인 작업 처리를 할 수 있다. 

 

 

! 인터럽트 당한 시점의 레지스터와 program counter를 save한 후 cpu의 제어를 인터럽트 처리 루틴에 넘긴다. 

 

* Interrput의 넓은 의미 

하드웨어 관점에서의 interrupt : 하드웨어가 발생시킨 인터럽트

소프트웨어 관점에서의 interrupt : Trap이라 함. 

 

[ 소프트웨어 관점에서의 Interrupt ]

1) Exception :  프로그램이 오류를 범한 경우 

2) System call : 사용자 프로그램이 운영체제의 서비스를 받기 위해서 커널 함수를 호출하는 것 

 

* 인터럽트 관련 용어 

1) 인터럽트 백터 : 해당 인터럽트의 처리 루틴 주소를 가지고 있음

2) 인터럽트 처리 루틴 : 해당 인터럽트를 처리하는 커널 함수(인터럽트 핸들러) 

* 중요한 개념 ! 현대의 운영체제는 인터럽트에 의해 구동 된다. 

 

[ Memory - 주기억 장치 ]

- 데이터와 프로그램을 저장하는데 사용되는 중요한 하드웨어 구성 요소

- RAM이 가장 일반적인 형태의 주기억 장치이다. 

- 전원이 공급되는 동안에만 데이터를 유지하며 전원이 꺼지면 저장된 데이터는 손실이 된다. 

따라서 주기억 장치는 일시적인 데이터 저장에 주로 사용되며, 영구적인 데이터 저장을 위해서는 보조저장장치(하드디스크나 SSD)등을 활용한다. 

- 주소지정을 통해서 데이터에 접근이 가능하며, 각 데이터의 위치는 고유한 주소로 식벽되고, CPU또한 주소를 사용하여 특정 위치에 있는 데이터에 접근할 수 있다. 

- 물리적인 제약으로 인하여 용량이 한정적이며 보조 저장장치에 비해서 상대적으로 작은 용량을 가지공 ㅣㅆ음. 

 

[ 주기억장치 구성 ]

OS : 운영체제의 코드와 운영체제의 데이터가 저장됨 

사용자 프로그램 : 사용자가 작성한 프로그램 코드와 데이터가 저장되는 영역

스택과 힙 : 프로그램 실행 중에 동적으로 할당되는 메모리 영역

함수 호출과 동적 데이터 구조 등을 위해 사용됨. 스택은 함수 호출과 관련된 정보를 저장하는 데 사용되고, 힙은 동적으로 할당된 메모리를 관리하는데 사용됨 

공유 라이브러리 : 여러 프로그램에서 공통으로 사용하는 라이브러리 코드와 데이터가 저장되는 영역

 

[  I/O Device ]

- Disk(하드디스크) : 보조기억장치라고도 함 

 

* Device controller

CPU가 I/O장치들에게 직접적인 접근이 어렵기 때문에 Device Controller에게 요청하여 접근할 수 있음 

해당 I/O 장치 유형을 관리하는 일종의 작은 CPU

제어 정보를 위해 control register, status register를 가짐

 

- local buffer를 가짐(일종의 data register)

- I/O는 실제 device와 local buffer 사이에서 일어남

- device controller는 I/O가 끝났을 경우 Interrupt로 CPU에 그 사실을 알림 

 

* device driver(장치 구동기) : OS 코드 중 각 장치별 처리 루틴 -> Sofeware

* device controller(장치제어기) : 각 장치를 통제하는 일종의 작은 CPU -> hardware 

 

* 입출력 I/O의 수행

- 모든 입출력 명령은 특권 명령이다. 

 

*  사용자 프로그램은 어떻게 I/O를 하는가?

- 시스템 콜이라 함은 사용자 프로그램이 운영체제에게 I/O를 요청하는 것 

- trap을 사용하여 인터럽트 벡터의 특정 위치로 이동하게 됨

- 제어권이 인터럽트 벡터가 가르키는 인터럽트 서비스 루틴으로 이동

- 올바른 I/O요청인지 확인 후 I/O 수행

- I/O 완료 시 제어권을 시스템 콜 다음 명령으로 옮김 

 

4) DMA Controller 

 

5) timer (CPU TIME 쉐어링을 위해서)

- Memory에서 CPU를 독점하는 것을 방지하기 위해서 timer에 Setting된 시간이 지나면 interrupt line?? 을 주게 됨 

1. 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킨다. 

2. 타이머는 매 클럭 틱 때마다 1씩 감소

3. 타이머 값이 0이 되면 타이머 인터럽트 발생

4. cpu를 특정 프로그램이 독점하는 것으로부터 보호하게 됨

5. 타이머는 time sharing을 구현하기 위해 널리 이용된다. 

6. 타이머는 현재 시간을 계산하기 위해서도 사용됨 

 

* CPU -> 사용자 프로그램 + TIMER(기본 시간 세팅) -> 세팅 된 시간이 지났을 경우 -> CPU제어권이 OS로 넘어감

* 만약에 사용자 프로그램에서 I/O 장치에게 요청사항이 있을 경우에 OS를 통해서만 접근이 가능하게 됨 

* 사용자 프로그램은 CPU제어권을 OS에게 넘기고 OS쪽에서 I/O Controller에게 요청하여 접근이 가능하게 된다.