본문 바로가기

CS/컴퓨터 시스템

Chap 4. 운영체제란?

1. 운영체제란 ?

컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층

(소프트웨어이긴 하지만 실제론 시스템 소프트웨어라고 함)

즉, application과 하드웨어를 연결하는 중간자 역할

 

좁은의미(협의의 운영체제)  = 커널

  • 학문적 관점에서는 운영체제를 커널로 포커싱 함
  • 운영체제의 핵심 부분으로 메모리에 상주하는 부분

넓은 의미(광의의 운영체제) = 커널 + 알파

  • 커널 뿐 아니라 각종 주변 시스템 유틸리티를 포함한 개념

       *시스템 유틸리티 : 사용자가 사용할 수 있는 프로그램을 의미하며 주변 장치를 컨트롤하는 드라이버 같은 것들이 깔려 있다. 

전체적인 이미지를 계층적으로 표현

 

2. 운영체제의 목적

크게 2가지의 목적이 있다. 

 

(1) 하드웨어를 편리하게 사용할 수 있는 환경을 제공

 

    a. 운영체제는 동시 사용자, 프로그램들이 각각 독자적 컴퓨터에서 수행되는 것 같은 환상을 제공한다. 

    *동시 사용자 = 컴퓨터에서 멀티 유저 기능 제공 → 여러 명이 동시에 사용 가능\

    구체적으로 설명하자면, 

    물리적 컴퓨터는 하나인데 여러 명이 사용할 때(하나의 물리적 컴퓨터를 여러 사람이 쪼개서 사용하고 있는 상황)

    한 사람이 마치 하나의 컴퓨터를 사용하고 있는 것처럼 서비스(abstract machine)를 제공한다는 것이다. 

 

    b. 운영체제를 통해 명령어 타이핑 만으로 명령어를 내릴 수 있다. ⇒ 기계어에 비해 상대적으로 편리하게 사용할 수      있는 환경을 제공해준다.

    만약, 사용자가 어떤 응용 프로그램을 실행을 한다면 운영체제가 이들을 대응시켜 사용자에게 결과값을 보여주는 것      이다. (입력을 가지고 출력을 해주는 과정은 운영체제가 담당한다.)

    운영체제가 없었다면 컴퓨터를 기계어나 어셈블러 등으로 제어를 해야 하기 때문에 힘들었을 것이다. 

 

 

(2) 컴퓨터 시스템의 자원을 효율적으로 관리한다.

 

컴퓨터 시스템의 자원(eg. CPU, RAM, SSD, HDD등)을 효과적으로 쓰는 것이 중요하다.

 

    a. 운영체제는 프로세서 , 기억장치, 입출력 장치(키보드, 화면 등)등의 효율적 관리한다. 

 

    효율적으로 관리하기 위해 운영체제는 다음과 같은 일들을 한다. 

    ex 1) 프로세서에 어떤 명령어를 내리고 → 그 명령어는 실제로 메모리에서 가져와서 → 이것을 출력 장치로 보내준              다 

    ex 2) 실행중인 프로그램들에게 짧은 시간씩 CPU를 번갈아 할당한다. cpu는 기본적으로 클럭 단위로 움직이는데

           클럭마다 다른 프로그램들을 실행시킬 수 있다. 

    ex 3) 실행중인 프로그램들에 메모리 공간을 적절히 분배한다. 하나의 프로그램이 메모리 전체를 차지하는 것이

           아니라 여러 프로그램들이 사용할 때 공평하게 나누어주어야 한다. (적절하게 배분)

 

    - 사용자 간의 형평성 있는 자원 분배를 한다. (ex) 3명의 사람이 사용할 수 있는 것을 최대한 공평하게 하기

    - 주어진 자원으로 최대한의 성능을 내도록 한다. (효율적으로 관리)

  • MIPS 라는 ISA는 명령어를 최대한 효율적으로 사용하기 위해 크기에 제약을 두었다. 예를 들어,  "메모리는 16비트만 사용, 레지스터는 몇 비트만 사용이 가능하다" 등의 제약이 있었다. 운영체제는 이러한 ISA를 통해 최대한 성능을 낼 수 있도록 잘 관리해주는 것이다.

b. 사용자 및 운영체제 자신의 보호

  • 사용자 권한 관리, 운영체제를 누군가가 손상시키면 안되기 때문에 누가 잘못된 명령어를 입력했을 때 뱉어내는 것과 같은 프로그래밍이 되어있어야 한다.

c. 프로세스, 파일, 메시지 등을 관리

  • 메시지 = 사용자 혹은 장치들에서 도출해내는 메시지들도 있기 때문에 이러한 것들을 관리해주고 어디에 저장하고 어디에 전달해줘야하는지 관리한다.

(이전에는 cpu가 느리고, 메모리도 크지 않았기 때문에 한정되어 있는 cpu메모리 자원을 최대한도로 사용해야 그 효율적인 관리 하에서 최대를 뽑아낼 수 있고 좋은 효율이 날 수 있다. 이러한 것을 연구한 것이 운영체제라고 할 수 있다. )

 

3. 운영체제 처리 방식

크게 3가지가 있다.

(1) 배치 작업(batch processing)

operator작업 ⇒ 옛날에는 사람이 했다.

ex) printf라는 작업을 짜면 이에 해당하는 명령어(기계어)에 대해서 펀치로 구멍을 뚫는 작업을 함 그리고 컴퓨터에 넣으면 결과가 나온다.

  • 작업 요청의 일정량 모아서 한꺼번에 처리한다. (동시에 다른 일은 할 수 없음)
  • 작업이 완전 종료될 때까지 기다려야 한다. (실패하면 처음부터 다시해야 한다)

ex) 초기 punch card 처리 시스템

초창기 os 작업은 이렇게 했다. 지금은 이러한 작업을 하지 않는다.

 

(2) 시분할 ( time sharing )

 = 여러 작업을 수행할 때 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용한다. 

 

  • 일괄 처리 시스템에 비해 짧은 응답 시간을 가진다.  ex) 유닉스
  • interactive한 방식이다. = 어떤 명령어를 입력하면 바로 결과를 화면에 보여준다.  (ls 명령어를 터미널에 치면 결과가 바로 나옴)
  • ex) 1, 2, 3번의 프로세스들을 쪼개서 해당 시간에 해당 프로세스를 처리한다.

      1번 시간에는 입력을 받고 3번 시간에 출력을 받는 것으로 나눌 수 있음

      각 사용자가 컴퓨터로부터 서비스를 제공 받는 시간을 숫자로 표시함

ex) 지윤이는 컴퓨터 처리 시간을 나눈 것 중에 1, 4, 7...번을 할당, 마쉬는 2, 5, 8번을 할당.. 해서 운영체제 마다 다른 알고리즘을 통해 일처리를 한다. (기본적으로 순환적으로 일처리를 한다)

 

(3) 실시간 (realtime OS)

 = 정해진 시간 안에 어떠한 일이 반드시 종료됨이 보장되어야 하는 실시간 시스템을 위한 OS

  • 일처리를 하고 있다가 급박한 명령이 들어오면 그것부터 실행하게 한다.

       ex) 원자로, 공장 제어, 미사일 제어, 반도체 장비, 로보트 제어

          예를 들어 미사일을 쏘아올렸는데 방향을 틀어라는 명령어를 입력했는데 그 time slot이 아니라서 기다리게되면 미사일의 방향이 엄청 틀어지는 문제점이 있다. 

  • 실시간 시스템의 개념 확장 (민감한 정도의 차이)

       (1) 경성 실시간 시스템(hard realtime system) = 조금 더 중요한 시스템인 경우임 ⇒ 반도체 정비, 미사일

       (2) 연성 실시간 시스템(soft realtime system) = 미사일 보다는 덜 중요한 시스템 ⇒ 티비

 

4. 운영체제에서 사용되는 용어

아래의 단어들은 모두 컴퓨터에서 여러 작업을 동시에 수행하는 것을 뜻한다.

하지만 엄밀히 말하면 강조하는 부분이 다르다. 

 

 

(1) multitasking

     멀티 스레드

     동시에 실행하게 느껴지게 하기 위한 것이다. 

 

(2) multiprogramming

     = 여러 프로그램이 메모리에 올라가 있음을 강조하는 단어이다. 

 

(3) Time sharing

     = CPU의 시간을 분할하여 나누어 쓴다는 의미를 강조하는 단어이다. 

 

(4) multiprocess

    하나에 메모리에 1, 2, 3번의 프로세서가 올라가는 것이다.

     1번을 조금 수행하다가 2번을 조금 수행하고 3번을 조금 수행한다. 사용자가 보기에는 동시에 실행하는 것처럼 보인다.  ( = timesharing)

- 멀티 프로그래밍 그 안에 프로세스가 올 수 있는 것이다. (광의의 개념 = 프로그래밍이고 이보다 작은 레벨이 프로세스의 개념이다)

 

[주의]
multiprocessor(멀티 프로세서)는 하나의 컴퓨터에 CPU가 여러 개 붙어 있음을 의미 (ex CPU 4개를 가지고 있음)
여기서 프로세서는 CPU를 의미하며 멀티 프로세서는 멀티 프로세싱과는 다르다.

    

 

5. 운영체제의 예

[유닉스]

리눅스 = 오픈 프로그램

- 예전의 os들은 어셈블러, 기계어로 다 프로그램을 짰다. → 복잡하고 힘들었다.

- 하지만 유닉스의 코드는 거의 다 씨언어로 되어 있다. 그래서 만약 커널을 바꾸고 싶다면 사용자가 변경할 수 있다. 그리고 이해 가능하다. (파일 관리는 어떻게 하는지 , timesharing은 어떻게 하는지)

어셈블러로 되어있으면 해당 CPU에서만 돌아갈텐데 씨언어로 되어있다는 것은 높은 이식성을 가지고 있다. 다른 CPU에서 컴파일만 다시 하게 되면 다른 CPU에서도 해당 유닉스를 사용할 수 있게 되는 것이다.

최소한의 커널 구조 , 이러한 커널에 응용 프로그램들을 붙이는 것이다.

이에 대한 장점으로 사용자들이 어떻게 어플리케이션을 짜느냐에 따라서 확장이 용이하다.

소스 코드가 공개되어 있기 때문에 프로그램 개발을 이에 맞게 할 수 있다는 것이다.

이것을 이용해서 많은 버전이 나왔다.

- system V, FreeBSD, sunOS, Solaris, AIX, HP-UX(회사들이 각각 유닉스 버전들을 이용해서 프로그램들을 개발했다. 최근에는 클라우드로 가면서 유닉스보다는 리눅스로 많이 간다.

- 예전에 리눅스는 개인의 학문을 위해 오픈 소프트웨어이기 때문에 개인들이 많이 사용했는데 요즘에 기업들은 거의 리눅스를 사용한다.

 

- 리눅스는 유닉스와 거의 비슷한 커널 구조로 되어있다. 거의 같은 명령어도 있다. 

방화벽도 리눅스를 통해서 개발되었다.

[ DOS ( = Disk Operating System)]

처음으로 os를 돈받고 팔기 시작했다. 

- MS사에서 1981년 IBM-PC를 위해 개발

- 단일 사용자, 단일 프로그램용 운영체제 → 프로그램을 실행시키면 멀티 프로세싱을 하지 못했다.

- 그 당시에는 메모리는 640k 한계로 인해 느렸다.

[MS windows]

- MS사의 다중 작업용 GUI 기반 운영 체제

  그 당시 리눅스는 멀티테스킹이 가능했으나 GUI를 하지 못했다.

- 마우스를 사용해서 명령어를 내리고 클릭을 통해 사용한다.

[ Handheld device를 위한 OS ]

핸드폰 같은 것을 의미한다. 

예전에 PDA라는 작은 컴퓨터라는 개념이 있었다. (윈도우 OS를 쓰는 PDA가 있었고, 유닉스 OS를 쓰는 PDA가 있었다) 이것을 발전시킨 것이 핸드폰이다.

  • 종류 = 안드로이드( 기본 베이스가 리눅스이다. ) , IOS