nonani

운영체제의 태동과 발전 (2) 본문

CS공부/운영체제

운영체제의 태동과 발전 (2)

nonani 2023. 3. 13. 23:44

지난 게시글에 이어 운영체제 과목에서 다룬 운영체제의 태동과 발전에 대해 정리한 게시글입니다.


 

목차

  1. 초기 일괄처리 시스템
  2. 일괄처리 시스템
  3. 다중프로그래밍
  4. 시분할 시스템

 

초기 일괄 처리 시스템

이전의 방식에서 문제가 있음을 인지하고 역시 인간 더 나은 방법을 찾기 위해 노력하는데, 바로 전문가를 고용하는 것이다. 

operator(운영자)를 고용하여 사용자의 작업을 전문적으로 대행하였다. 

사용자들이 요구하는 비슷한 작업들을 함께 묶어서 배치(batch)로 처리하였고 배치는 별도의 오프라인 테이프에 기록이 되는데 이걸 operator가 다시 주컴퓨터에 옮겨 출력된 자기테이프를 이제 위성 컴퓨터로 다시 옮겨 프린트 되는 것을 사용자가 받아가는 형식으로 진행되었다

지금까지의 설명을 표현한 사진. 빨간 색으로 감싸져있는 부분을 operator가 일일히 테이프를 옮겨주며 진행했다.

 

그렇다면 여기서 문제는 뭐였을까? operator와 사용자 사이에서의 갈등이 생기는 경우가 있었다고 한다. 학생 꺼는 나중에 해주고, 교수꺼는 먼저 해준다던지...등등

그래서 개선된 개념이 아래와 같다.

 

일괄 처리 시스템

  •  
  • 채널 : 입출력 장치가 CPU를 거치지않고 독립적으로 메모리의 버퍼에 직접 자료를 전송할 수 있게 해주는 회로(명령어, 레지스터 및 입출력 제어장치로 구성). CPU와 메모리를 공유하여 CPU로부터 명령을 받는다. 이러한 작업을 CPU와는 독립적으로 입출력 처리함으로서 작업의 병렬 수행이 가능하게 했다. 기존의 사람(오퍼레이터)가 하던 작업을 이젠 채널을 통해 대체했다.
  • 버퍼 : 채널이 사용하는 메모리이자 CPU가 접근하는 메모리 상의 장소. 이 버퍼가 있어 자료를 공유하면서도 서로 간섭없이 각자의 작업을 수행할 수 있게 된다. 연산하는 동안 읽거나 쓰는 것을 가능하게 하여 입출력 대기시간을 없앴다.
  • cf. CPU도 버퍼를 접근하고 채널도 버퍼를 공유하기 때문에 충돌 혹은 경쟁이 발생할 수도 있다. 이를 싸이클 스틸링이라는 것으로 해결한다.
  • 인터럽트 : 채널을 통해 입출력을 하기 위해선 먼저 CPU가 입출력 명령을 내리고 입출력 장치가 채널로 입력을 하고 나면, CPU에게 나 다 입력했어~라고 알려줘야하는데 이를 인터럽트라고 했다. 이에 따라 CPU에서 수행하는 처리를 ISR(Interupt Service Routine)이라고 한다. (이러한 처리는 프로그램이 아니라 하드웨어에 의하여 자동으로 호출되는 것이다.) 인터럽트는 입출력 완료 뿐만 아니라 예외동작(파일종료, 테이프 끝, 패리티 오류 등)에서도 발생한다. 그러면 ISR이 CPU에게 입출력장치가 입력한거 버퍼의 어느부분에 있어라고 알려주고 그걸 토대로 CPU가 연산을 하는 것이다. 이렇게 보면 CPU는 참 마마보이가 아닌가..?
  • cf. 트랩 : 인터럽트와 유사한 소프트웨어적 인터럽트(시스템 콜 ex: read(), write() ). 언더플로우나 오버플로우 등에서 발생된다.

 

추가로 더 나아가 일괄 처리 시스템에 상주 모니터의 개념도 추가 되는데

위 사진 처럼 메모리에 인터럽트 처리기 및 입출력 관리자를 메모리에 상주시켜 운영을 좀더 자동화 시켰다.

또한, 잘못된 사용자 프로그램으로(포인터 잘못 써서) 상주모니터의 영역에 접근하여 시스템을 다운시키니까 상주모니터 보호의 필요성이 대두됨.

따라서 모든 프로그램이 입출력을 직접하지 않고 상주모니터의 루틴을 호출하도록 하고(이 개념이 훗날의 시스템 콜), 각 연산(instruction) 수행 시 메모리 접근 범위를 제한하였음.

 

이렇게 초기 일괄처리 시스템에 비해선 효율성이 개선되었고 하나의 프로그램이 CPU를 독점하므로 이 프로그램을 올린 사용자 입장에서는 편의성이 높음. 

그래도 아직까지 사용자와 빈번한 대화가 필요한 대화형 응용 프로그램에는 효율성 측면에서 적용이 어려웠음.


 

다중 프로그래밍 (Multiprogramming)

이전의 시스템에서는 한 프로그램이 시작되면 메모리에 다른 프로그램이 대기하고 있어도 이전의 프로그램이 완료되기 전까지 대기하게 되었다. 하지만 이 방식의 경우 처음 돌아간 프로그램이 입출력 대기를 하게 되면 다른 프로그램을 실행하는 식으로 여러 프로그램의 수행이 가능하도록 하였다. 그러나 이 경우 여러 프로그램에서 출력이 산발적으로 발생하게 되는데 이 문제를 아래의 방법으로 해결하였다.

  1. Buffering : 입출력 시 CPU의 속도와 입출력 장치간의 속도 차이를 해소하기 위해 하드 디스크나 매모리 영역에 자료를 잠시 저장해놓는 것
  2. Spooling : Buffering과 유사한 개념이지만 버퍼링은 속도의 차이를 해소하기 위한 것이었다면 Spooling은 순차적 사용장치(ex.프린터)를 병렬 수행 프로그램이 사용할 수 있도록 도와주는 방법이다. 속도가 빠르고 임의 접근이 가능한 디스크에 출력되는 자료를 잠시 저장해둔 후 프로그램이 종료되고 난 후 처리함으로써 출력이 순차적으로 되는 것이 가능하게끔 하였다.

Spooling 관련 그림

 


 

시분할 시스템

본문내용넣기

 

 

 

 

 


 

마무리

마무리

 

 

'CS공부 > 운영체제' 카테고리의 다른 글

운영체제의 태동과 발전 (1)  (1) 2023.03.13