컴퓨터기본/운영체제 기본

[OS] 2. OS란? ~ 컴퓨터 역사

차가운오미자 2021. 6. 14. 22:25

 

* 고려대학교 2019-1 수업을 정리한 내용!

https://www.youtube.com/watch?v=QBeeYeeLtcw&list=PLl7a4hCkdyMCPNT-3U3fzyb6FEBCS0Ddm&index=2

 

소프트웨어의 구분

  • 시스템 소프트웨어 (APP sw를 구동할 수 있도록하는 ex)DB, OS)
  • 응용 소프트웨어 (OS위에서 존재, ex) AI 음성 인식 등은 모두 응용 소프트웨어)

 

운영체제와 응용 소프트웨어의 차이

1. 운영체제는 항상 동작하고 있다.

 없으면 컴퓨터를 사용할 수 없다.

2. 운영체제는 supervisor 모드로 동작한다. 

  • 응용 프로그램과 구분해야하기 때문이다.
  • 운영체제는 하드웨어 자원에 접근하고, 이를 제어한다.
  • 운영체제 역할을 AI가 하겠다? 말이 안됨.
  • supervisor모드는 CPU가 제공해주는 것이다. 운영체제가 스스로 supervisor모드야! 라고 할 수 없음.
    •  cf) 다른 어플리케이션들은 user모드
  • CPU바로 위에서 동작하는 게 OS라서 OS를 이해하기 위해 CPU의 기능을 이해할 필요가 있다.

3. 하드웨어 기능을 직접 다루기 때문에 디바이스 드라이버를 갖고 있다.

- 응용 프로그램은 디바이스를 직접 다루지 못함. OS를 통해서 접근하는 것

 

* 커널: 

- 운영체제 중에서도 필수적인 요소

- OS는 어쩔 땐 커널과 같은 의미. 어떨 땐 OS는 커널, 윈도우, 라이브러리를 모두 포함하기도 한다.

   ex) 안드로이드: 흔히 운영체제라고 부르는데, 안드로이드의 커널이 뭐냐고 물어보면, 리눅스이다. 리눅스 위에 여러가지 부가 기능(샌드박스 등 미들웨어)이 올라간 게 안드로이드

 

* 라이브러리

C언어, 자바 언어를 할 떄, 같이 라이브러리가 붙게 되는데, printf같은 것을 사용할 수 있는 것은, 이게 라이브러리가이기 때문이다.

 

컴퓨터 역사

*펀치카드

천공 카드(穿孔-, punched card)는 데이터를 표현하기 위해 규칙에 따라 직사각형 모양의 구멍을 뚫어 사용하는 종이 카드로서 초기의 저장매체이다. 천공 위치에 구멍을 뚫거나 뚫지 않음으로서 하나의 비트를 나타날 수 있다.

 

참고: https://ko.wikipedia.org/wiki/%EC%B2%9C%EA%B3%B5_%EC%B9%B4%EB%93%9C

 

* 배치 처리

- job (거의 프로그램과 동의어)단위, job이 순차적으로만 수행 가능.

- 펀치 카드를 제출하면 안에 있는 오퍼레이터가 이걸 메모리에 올림. 카드 리더를 돌려서. 그러면 수행이 됨.

- user와 상호작용 불가

- 배치: 프로그램이 시작되면 끝날 때까지 간다. 순차적으로 간다. 라는 의미를 담고 있다.

 

일괄 처리(batch processing)란 최종 사용자의 개입 없이 또는 (자원이 허가한다면) 실행을 스케줄링할 수 있는 작업(job)의 실행을 의미한다.[1] 컴퓨터 프로그램 흐름에 따라 순차적으로 자료를 처리하는 방식이다. 초기의 일괄 처리 방식은 사용자와 상호작용하는 것이 불가능했지만, 운영 체제가 발전함에 따라 프로그램 입출력을 통해 상호작용하는 것이 가능해졌다. 일괄 처리는 1950년대 전자 컴퓨팅 초기 시절 이후 메인프레임 컴퓨터와 함께하고 있다.

 

출처: Wiki: https://ko.wikipedia.org/wiki/%EC%9D%BC%EA%B4%84_%EC%B2%98%EB%A6%AC

 

-> CPU가 빈번히 놀고 있음. 카드 리더가 펀치카드를 읽어야 하고, 이를 메모리에 올려야하고, 이런 걸 또 사람이 함. 비싼 기계가 놀고있네??? -> 뭔가 바꿔야겠다.

 

시스템 최적화할 때 어디까지 해야하나? CPU가 100%로 일할 때까지.

 

사람의 개입 최소화, 프로그램이 메모리에 올라가서 수행하고, 끝나면 다른 프로그램이 올라가고

-> 그래도 유휴상태가 계속 있음.

ex) 예전엔 프린터가 프린트할 때 아무것도 못함 -> 해결: Spooling

 

Spooling

IO를 컴퓨테이션과 동시에 진행할 수있도록 하는 것. 문서를 버퍼나 메모리로 보냄. 그럼 프린터는 버퍼에서 자신의 속도로 출력을 함. 그동안 컴퓨터는 다른 작업을 수행할 수 있도록. 인쇄할 파일을 디스크, 메모리의 spool영역으로 보내는 것을 스풀링이라고 부름. 이거 알아서 처리하셈! 그리고 CPU는 다른 일을 할 수 있도록 해주는 것.

 

IO가 끝나야 다음을 진행할 수 있는 일일 경우에는 어떡하지?

예를 들어 read를 한다. read를 다 해야 다음 step을 밟을 수 있음. 즉 읽기 작업 완료까지 암 것도 못함.

그래서 등장한게 멀티 프로그래밍!!

 

Multiprogramming

예전에는 메모리에 하나의 프로그램만 올림. 근데 멀티 프로그래밍은 메모리에 여러 프로그램이 올라가는 것.

내가 job1을 돌리다가 IO를 함. 근데 스풀링을 할 수 있는 것도 아님. 그럼 job1 기다려! 하고 job2를 수행시킴. 멀티 프로그래밍을 하게 되면서 하나 이상의 job들을 동시에 수행할 수 있게 됨.

배치는 한 번에 하나만 돌아갔다. 하지만 멀티 프로그래밍의 개념이 도입되면서 돌아가는 프로그램이 다수가 되었다.

job1, job2 이 프로그램들은 모두 수행 중. 하나는 기다리는 상태임. 두 번째도 기다려야하면 그 때 세번째를 수행하고. cpu가 하나라고 가정했을 때 어느 시점 t에서 수행된 프로그램은 1개이지만, 보기에는 job1도 수행하고 있고, job2도 수행하고 있고, job3도 수행하고 있는 것 같음. 이러한 상태를 concurrent하다고 한다.

CONCURRENT, SIMULTANEOUS, PARALLEL 용어 구분

cf) simultaneous: 동시적인 (한국어로 하면 concurrent나 simultaneous나 같지만)
concurrent: cpu가 하나 있는 경우에 위와 같은 사항. 부분적으로 수행이 되고 있다는 뜻으로 이해.
하지만 요즘엔 코어 수가 늘어나서, 물리적으로 동시에 수행을 할 수 있음. 이런 경우가 simultaneous한 것.

cf) parellel: 사실 두 개 다 될 수 있는데, simultaneous에 더 가까움. execution을 다룰 땐 (컴퓨터 구조에서) parallel이란 단어를 많이 씀. 프로세스에서는 simultaneous, concurrent를 많이 씀.

 

멀티 프로그래밍을 비유적으로 표현하자만 화로 위에 여러 음식 다 올려놓고 이거 볶았다 저거 저었다가 하는 것.

 

멀티프로그래밍을 하면서 OS의 역할이 생기는 것. 어떤 job을 수행할 것인지, IO를 마치고 다시 수행하기 위해서 IO할 때 어디까지 했는지를 기억해둬야 한다. 이런 걸 다 OS가 하는 것.

 

중간에 프로세스 kill할 수 있는가? 멈출 수 있는가? job을 수행하다가 멈춘다는 뜻이랑 비슷한데. 구현할 수 있다. 중간에 IO하러 가는 거랑 비슷하게 멈춰버리고 그냥 메모리에서 내려버리면 됨.

 

'컴퓨터기본 > 운영체제 기본' 카테고리의 다른 글

[OS] 4. 운영체제 구조(2)  (0) 2021.06.14
[OS] 3. 운영체제 구조  (0) 2021.06.14
[OS] 1. 개요  (0) 2021.06.14