티스토리 뷰

OS

OS - 운영체제 기술의 발전

perseverance 2024. 8. 16. 17:12

1 일괄처리

컴퓨터에서 프로그램을 작성하여 실행하는 과정을 알아보자. 지금은 프로그래머가 직접 컴퓨터 앞에 앉아 모니터 화면을 보면서 키보드 입력을 통해 소스 코드를 작성한다. 이클립스 eclipse 등 통합개발환경을 사용하기 때문에 프로그램 작성도 수월하고 디버깅 지원도 받을 수 있으며 작성된 프로그램을 즉시 실행해 볼 수도 있다. 실행 결과는 모니터 화면에서 바로 볼 수 있다.

그러나 옛날에는 그렇게 할 수 없었다. 키보드도 모니터도 없었기 때문이다.

과정

  1. 프로그래머는 코딩 시트 coding sheet 라는 종이에 연필로 소스 코드를 적고, 그것을 전산소에 제출한다.
  2. 제출하면 전산소에서는 이 코드 내용을 천공카드 punched card 로 옮긴다.
    • 천공카드는 종이로 된 카드인데, 카드의 특정 위치에 구멍을 뚫음으로서 특정 글자를 표시할 수 있게 한 것이다.
    • 카드 한 장에 코드 한 줄을 넣을 수 있다. 1000줄 길이의 코드라면 카드 1,000장이 필요한 것이다.
  3. 천공카드는 카드 리더기에 의해 읽혀진다.
  4. 읽혀진 카드 내용, 즉 소스 코드는 메모리에 저장된다.
  5. 다음은 메모리에 저장된 소스 코드를 컴파일 해야 한다. 하드 디스크가 없었기 때문에 마그네틱 테이프에 저장된 컴파일러 프로그램을 읽어 메모리에 올린다.
  6. 메모리에 올라온 컴파일러 프로그램은 소스 코드를 컴파일하여 목적 코드 object code 를 생성한다.
  7. 목적 코드를 실행 코드 executable code 로 만들기 위해 마그네틱 테이프의 다른 위치에 저장된 링커 linker 프로그램을 읽어 메모리에 올린다.
  8. 메모리에 올려진 링커 프로그램은 목적 코드를 링크하여 실행 코드를 만든다.
  9. 이렇게 만들어진 실행코드를 실행시킨다. 코드 실행 결과는 모니터 화면이 아니라 라인 프린터가 종이에 인쇄해서 보여준다.

하나의 프로그램을 작성하여 실행하기까지 이처럼 많은 과정이 필요하다. 처음에는 이런 일련의 과정을 컴퓨터 운영자가 직접 했지만, 사람이 하기 때문에 속도도 느리고 실수할 확률도 높았다. 그래서 이런 일을 사람이 아니라 컴퓨터 스스로 하게 해야겠다는 생각을 하게 됐다. 그 결과 이런 일련의 과정들을 스스로 하게 만드는 프로그램을 개발했고 이 프로그램이 컴퓨터에 사용되기 시작했다.

이 프로그램은 카드 리더기를 가동시켜 천공카드에 있는 소소코드를 가져오고 (1), 마그네틱 테이프 장치를 구동하여 컴파일러 프로그램을 가져와 실행시켜서 (2) 목적코드를 만들고 (3), 다시 마그네틱 테이프 장치를 구동하여 링커 프로그램을 가져와 실행시켜서 (4) 실행코드를 만들고 (5), 완성된 실행코드를 실행하게 하는 동작을 한다.

그림 4.1에서 보인 것처럼 이 프로그램은 전체 과정 동안 항상 메모리에 상주하기 때문에 상주 모니터 resident monitor 라고 불렀다. 상주 모니터 덕분에 컴퓨터 사용이 편리해지고 사람의 개입이 줄어듦으로서 실수도 하지 않게 되고 속도도 빨라졌다.

이 상주 모니터 프로그램이 현재의 운영체제 효시가 되었다. 이 프로그램은 일련의 과정들을 묶어서 일괄적으로 처리하기 때문에 이것을 일괄처리 시스템이라고 불렀고, 영어로는 batch processing system 이라고 한다.

일괄처리는 지금도 많은 컴퓨터에서 사용되고 있다. 컴퓨터 상에서 순서대로 일어나야 하는 일들의 목록을 파일에 저장하고, 이 파일에 있는 내용이 순서대로 일괄 처리되게 하는 것이다. 윈도우즈 운영체제에서는 .bat 확장자로 끝나는 파일들이 이런 목적으로 사용되는 파일들이며 (확장자 bat 는 batch processing 을 의미한다), 리눅스 또는 유닉스 운영체제에서는 .sh 확장자를 갖는 파일들이 이 목적으로 사용된다. sh 는 쉘 스크립트 shell script 의 약자이다.

2 다중 프로그래밍

초창기 컴퓨터는 한 번에 한 개의 프로그램만 실행했다. 그림 4.2 (a)와 같이 메모리에는 상주 모니터, 즉 운영

체제와 응용 프로그램 한 개만 놓인다. 당시 메모리 크기는 불과 수 KB 정도였는데, 값이 비싸 많은 용량의 메모리를 사용할 수 없었다.

그러다가 하드웨어 기술 발전으로 인해 메모리 가격이 낮아졌고 메모리 용량이 늘어남에 따라 메모리에 여러 개의 프로그램을 함께 올리는 것이 가능해졌다 (그림 4.2 (b)). 이와 같이 메모리에 여러 개의 프로그램을 올려 실행하는 것을 다중 프로그래밍 multiprogramming 이라고 부른다.

일반적으로 컴퓨터 프로그램에는 입출력을 하는 부분과 연산을 하는 부분들이 섞여있다. 예를 들어 파일의 내용을 읽거나 실행 결과를 모니터 화면에 출력하는 등의 일은 입출력 부분에 해당되며, 수의 합을 구하거나 비교하거나 정렬하는 등은 연산 부분에 해당된다. 입출력 부분은 입출력장치가 담당하며, 연산 부분은 CPU 가 담당한다. 즉 프로 그램이 실행될 때 어떤 부분은 입출력장치가 처리하고 또 어떤 부분은 CPU가 처리한다는 것이다.

그림 4.2 (a) 처럼 메모리 상에 단지 한 개의 응용 프로그램만 있다면 실행하는 부분에 따라 어떤 시간에는 입출력장치가 일을 하고 CPU 는 쉬며, 또 어떤 때는 반대로 CPU 가 일을 하고 입출력장치는 쉬게 될 것이다. 프로그램이 하나뿐이라면 입출력장치와 CPU 가 동시에 일하는 경우는 발생하지 않는다.

그러나 메모리에 여러 개의 프로그램이 있다면 달라질 수 있다. 예를 들어 그림 4.2(b) 에서 CPU 는 처음에 프로그램 P1 의 연산부분을 실행한다. 이후 P1 의 실행이 연산 부분을 지나 입출력 부분으로 가게 되면 CPU 는 즉시 그 다음 프로그램, 즉 P2 로 넘어가서 P2 의 연산 부분을 실행한다. 이렇게 되면 P1 을 위해서는 입출력장치가, P2 를 위해서는 CPU 가 각각 일을 하게 된다. 즉 입출력장치와 CPU 가 동시에 일을 하게 되는 것이다.

CPU 가 한 프로그램을 실행하다가 다른 프로그램 실행으로 넘어가는 것을 콘텍스트 스위칭 context switching 또는 문맥전환이라고 부른다. 콘텍스트 스위칭은 실행 중인 프로그램이 입출력 부분을 만나게 되면 일어나게 되며, 또한 실행 중인 프로그램이 종료해도 일어난다.

만약 메모리에 있는 프로그램 개수가 더욱 증가하면 CPU 와 입출력장치는 더욱 해야 할 일이 많아질 것이다. 즉 이용률이 높아진다. 값비싼 CPU와 입출력장치를 충분히 이용하지 않는다면 큰 낭비라고 할 수 있는데, 다중 프로그래밍 덕분에 이것들을 활용하게 되는 것이다. 다중 프로그래밍은 운영체제의 목적 중 한 가지인 성능향상에 큰 역할을 했다.

3 시공유 시스템

다중 프로그래밍 시스템의 단점

다중 프로그래밍 시스템에서는 CPU가 한 프로그램을 실행하는 도중 입출력 부분을 만나거나 또는 종료하면 그 다음 프로그램의 실행으로 넘어간다. 즉 콘텍스트 스위칭이일어난다.

그러나 어떤 프로그램이 실행되는 동안 오랫동안 입출력 부분도 만나지 않고 종료하지도 않으면 어떻게 될까? 메모리에 올라와있는 다른 프로그램들은 실행되지 못하고 계속해서 기다려야만 한다. 프로그램 마다 사용자들이 다르다면 실행되지 못하고 기다리고 있는 프로그램의 사용자들은 매우 답답함을 느끼게 될 것이다.

해결법

이런 답답함을 없애는 한 가지 방법은 각 프로그램별 CPU 시간을 제한하는 것이다. 즉 일정시간이 지나면 입출력 부분을 만나지 않아도 또한 종료하지 않아도 강제로 콘텍스트 스위칭을 해서 그 다음 프로그램의 실행으로 넘어가게 하는 것이다.

이것을 가능하게 하려면 타이머를 사용하면 된다. 타이머 timer 는 일정시간 간격으로 CPU에게 하드웨어 인터럽트 신호를 보내는데, 인터럽트 신호를 받은 CPU는 현재 프로그램 실행을 잠시 중단 후 운영체제 내부에 있는 타이머 인터럽트 서비스 루틴으로 점프한다.

타이머 인터럽트 서비스 루틴에서는 현재 실행 중인 프로그램의 상태를 저장한 후 CPU로 하여금 강제로 그 다음 프로그램을 실행하게 한다. 새로 실행된 프로그램 역시 일정시간이 지나면 타이머 인터럽트 발생에 따라 상태 저장 후 중단되고 그 다음 프로그램의 실행이 시작된다. 이렇게 순서대로 프로그램들을 실행하다보면 처음 프로그램으 로 되돌아오게 되는데, 저장된 상태로부터 재시작하여 남은 부분이 처리된다.

그림 4.3은 시간별로 프로그램 P1, P2, P3 가 순서대로 실행되는 모습을 보여주고 있다. 즉 CPU 시간을 각 프로그램이 공유하여 사용하고 있으며, 이런 시스템을 시공유 시스템 time sharing system (TSS) 이라고 부른다.

시공유 시스템은 1960년대 후반에 처음 개발되었으며, 초당 수십 번 또는 그 이상 콘텍스트 스위칭을 하기 때문에 메모리에 올라와 있는 여러 프로그램들이 동시에 실행되는 듯한 효과를 낸다. 즉 시공유 시스템은 멀티태스킹 시스템이다.

시공유 시스템의 장점

시공유 시스템에서는 어떤 프로그램이 CPU 시간을 독점하는 일 없이 메모리 상의 모든 프로그램들이 CPU 시간을 고르게 할당 받을 수 있기 때문에 프로그램의 사용자들이 답답해하는 일이 거의 없다. 따라서 사용자는 대화하듯이 컴퓨터를 사용할 수 있으며, 이런 이유로 시공유 시스템은 대화형 시스템 interactive system 의 운영체제로 널리 사용된다.

 

'OS' 카테고리의 다른 글

OS - 동기식 I/O와 비동기식 I/O  (0) 2024.08.16
OS - 커널과 이중모드, 시스템 콜  (0) 2024.08.16
OS - programmed I/O, Interrupted I/O, DMA I/O  (0) 2024.08.16
OS - 운영체제란?  (0) 2024.08.16
[OS] 프로세스 주소 공간  (0) 2024.05.13
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함