# CHAPTER 3 운영체제 - 기초

ygs1363·2023년 1월 2일
0

CS 전공지식 노트

목록 보기
4/19

Section 3.1 - 기초

[ YOUTUBE 쉬운코드 -OS ] < 이후 진행될 운영체제는 쉬운코드채널의 도움을 많이 받았습니다!

운영체제를 시작하기 앞서 알고 가면 좋을 사전지식을 알아 보자.

알고가면 좋을 사전지식

  • 프로그램

    컴퓨터가 실행할 수 있는 명령어들의 집합

  • 프로세스

    컴퓨터에서 실행중인 프로그램

    각각의 프로세스는 독립된 메모리 공간을 할당 받음

  • CPU ( Central Processing Unit )

    명령어를 실행하는 연산 장치

  • 메인 메모리 ( Main Memory )

    프로세스가 CPU에서 실행되기 위해 대기하는 곳

  • 캐시 (Cache)

    자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소
    => 저장 공간이 작고 비용이 비싼대신 빠름

  • 리소스 (Resource)

    사용될 수 있는 어떤 항목, 프로그램들이 활용할 수 있는 데이터나 루틴들

  • IO ( Input/Output )

    • 파일을 읽고 쓰거나 네트워크 어딘가와 데이터를 주고 받는 것
    • 입축력 장치(마우스,키보드,모니터 등등)와 데이터를 주거나 받는것
  • 스케줄러( Scheduler )

    어떤 프로세스에게 자원을 할당할지 순서와 방법을 결정하는 운영체제 커널의 모듈

  • 레지스터(Register)

    • n-bit의 정보를 저장할 수 있는 고속도의 기억장치를 말함.
    • CPU에서는 외부 요청을 처리하는 데 필요한 데이터를 일시적으로 저장하고 이동하는 고속도의 기억장치로 사용
  • 커널( Kernal )

    • 운영체제 중 항상 필요한 부분만을 전원이 켜짐과 동시에 메모리에 올려놓고 그렇지 않은 부분은 필요할 때 메모리에 올려서 사용하게 되는데, 이때 메모리에 상주하는 운영체제의 부분
    • 운영체제도 소프트웨어라서 메모리에 올라가야 하나 규모가 큰 프로그램이기 때문에 모두 올라간다면 한정된 메모리 공간의 낭비가 심할 것이기 때문에 커널로 분리

  • PCB (Process Control Block)

    • 특정한 프로세스를 관리할 필요가 있는 중요한 정보를 포함하는 운영 체제 커널의 자료 구조 ( 저장 장소 )
    • 그 정보에는 프로세스 번호, 포인터, 프로세스 상태, 레지스터, 프로그램 카운터(코드 위치) 등이 있음
  • 인터럽트 ( Interrupt )

    CPU가 프로그램을 실행하고 있을 때 실행 중인 프로그램 밖에서 예외 상황이 발생하여 처리가 필요한 경우

  • 오버헤드 ( Overhead )

    처리를 하기 위해 들어가는 간접적인 처리 시간, 메모리 등을 말함


1. 운영체제 ( Operation System )

컴퓨터 시스템의 각종 하드웨어적인 자원과 소프트웨어적인 자원을 효율적으로 운영 관리함으로써 사용자가 시스템을 이용하는데 편리함을 제공하는 시스템 소프트웨어

컴퓨터는 0과 1로 대화하는 기계이고 , 사람은 어플리케이션을 사용하여 많은 작업을 수행 .
여기서 생기는 수많은 요청을 컴퓨터에게 어떻게 전달할 수 있을까?..

사용자는 APP을 통해 원하는 작업을 요청

OS위에서 구동하는 APP은 OS에게 요청을 전달하고 해당 작업에 필요한 자원을 할당하고 하드 웨어에서 해당 작업을 수행할수 있게 도와줌 -> OS는 하드웨어와 소프트웨어를 하나로 묶는 핵심 소프트 웨어

즉 OS는 사용자가 편리하고 효율적인 방식으로 프로그램을 실행하는 환경을 제공하기 위해 하드웨어와 소프트웨어를 관리하는 실행 관리자 라고 말할 수 있음

가장 초창기에는 어떤 시스템을 사용했을까?..


2. 단일 프로세스 시스템

  • 한번에 하나의 프로그램만 실행
    => 다른 프로그램을 실행하려면 먼저 쓰던 프로그램을 다 끝내야함
  • 단점
    • CPU 사용률이 좋지 않음
      => 실행중에 있는 프로세스가 IO작업을 하는 동안에는 CPU는 아무것도 하지 않기 때문

해결하기 위해

  • 여러개의 프로그램을 메모리에 올려놓고 동시에 실행시 IO작업이 발생하면 다른프로세스가 CPU에서 실행
  • 예시
    1. P1과 P2의 프로그램이 1개의 CPU에서 실행될때
    2. P1과 P2가 동시에 실행되고 P1이 IO작업을 하게되면 P2가 CPU에서 실행되고 있고
    3. P2가 마찬가지로 IO작업을 하게될때 P1의 IO작업이 끝나면 다시 P1이 실행
    위와 같은 예시에서의 작업을 멀티프로그래밍 이라고 부름

3. 멀티프로그래밍 ( Multiprogramming )

동시에 작업을 실행시켜 CPU 사용률을 극대화 시키는것이 목적

  • 단점

    CPU 사용 시간이 길어지면 다른 프로세스는 계속 대기해야함

해결하기 위해

프로세스는 CPU를 한번 사용할 때 아주 짧은 시간(=quantum)만 cpu에서 실행되도록 하게함

  • 예시
    1. P1과 P2라는 프로그램에 1개의 CPU가 있음
    2. CPU의 시간의 흐름을 아주 짧은(=quantum) 만큼의
      시간만큼 쪼갬
    3. p1 조금 실행 됐다가 p2 조금 실행 됐다가 계속 번갈아가며 반복 (이 타임슬롯은 ms단위까지 짧음)

위 예시와 같은 시스템을 멀티태스킹이라고 함


4. 멀티태스킹 ( Multitasking )

멀티 프로그래밍과 비슷하지만 시간을 쪼개 교대로 동시에 실행되기 떄문에 사용자가 느꼈을때는 동시에 여러 프로그램이 실행되는것처럼 느껴짐

why 시간을쪼개고 번갈아가며 실행 하는가?..

프로세스의 응답 시간을 최소화시키기 위함
(프로그램을 실행하거나 동작시킬때 즉각 반응)

여기까지 진행을해도 아쉬운부분이 여전히 존재함


5. 남아있는 아쉬운 부분

  • 하나의 프로세스가 동시에 여러 작업을 수행하지 못함 (여러 프로세스를 만들어서 실행시킬 수 있겠지만 단점이 존재)

단점 1

프로세스 컨텍스트 스위칭은 무거운 작업

컨텍스트 스위칭 : cpu에서 실행되기 위해 어느 한 프로세스에서 다른 프로세스로 교체되는것

단점 2

프로세스 끼리 데이터 공유가 까다로움

공유되지않는 독립적인 메모리 공간을 가지기 때문

듀얼코어의 등장

듀얼 코어가 등장했기 때문에 하나의 성능을 개선하는것 보다 전체적인 성능을 향상시키는 방향으로 전환

듀얼코어를 잘 이용하고 싶음

위 내용들을 어떻게 해결할 수 있을까?


6. 스레드 ( Thread )

스레드는 OS레벨 에서의 스레드User 레벨에서의 스레드가 있고 여기서 말하는 스레드는 전자임

한 프로세스 안에서 여러 개의 작업들을 동시에 실행하기 위함 그리고 그 여러 개의 작업들을 실행하기 위해서는 여러 개 하나하나를 맡아줄 뭔가가 필요하고 그 하나 하나가 바로 스레드

  • 특징
    1. 프로세스는 한 개 이상의 스레드를 가질 수 있음
    2. cpu에서 실행되는 단위 ( unit of execution)
    3. 같은 프로세스의 스레드들끼리 컨텍스트 스위칭은 가벼움
    4. 자신들이 속한 프로세스의 메모리 영역을 공유
      => 데이터 공유가 쉬움 ( 큰 장점 )

메모리 구조 비교 ( 싱글 스레드 vs 멀티 스레드 )

  • 싱글 스레드를 가지는 프로세스의 메모리 구조 ( 스레드라는 개념이 나오기 전 프로세스 )

    해당 프로세스에 할당된 메모리 영역

    stack이 있고 heap이 있고 stack pointer가 있고 Program counter가 있다라는 정도만 알고 넘어가자

  • 멀티 스레드를 가지는 프로세스의 메모리 구조

    힙 메모리 영역을 공유 하며 / 공유하지 않는 영역이 있음

    • Stack

      스레드들이 같은 프로세스 메모리 영역 안에 있어도 자신만의 고유한 영역을 가짐

    • Stack Porinter

      스택에 데이터가 채워진 마지막 위치를 가리키는 레지스터

      사진에서 보면 각 스레드 번호에 해당하는 스택이 있고 그 각각의 스택을 가르키는 포인터들이 존재

    • Program counter

      다음번에 실행돼야 될 명령어가 있는 메모리 주소를 가르킴

      마찬가지로 각각의 스레드에 대한 Program counter들이 따로 존재

  • 핵심

같은 프로세스에 속한 스레드들은 그 프로세스의 메모리 영역을 공유 하지만
스레드들 만의 고유한 영역도 존재함을 보여줌

이런게 있구나 알고 넘어가는 정도

  • 예시

코어가 2개인 CPU에 스레드 두개를 가지는 프로세스가 동작을 할때 각각의 스레드는 각각의 코어로 병렬로 동작을 함 ( 진정한 동시 )

Core1 <- thread1
Core2 <- thread2
1:1 로 동작

위 예시의 시스템을 멀티스레딩 이라고 부름


7. 멀티스레딩 ( Multithreading )

하나의 프로세스가 동시에 여러 작업( thread를 통한 여러 작업 )을 실행하는데 목적이 있음

확장된 멀티태스킹 개념

여러 프로세스와 여러 스레드가 아주 짧게 쪼개진 cpu time을 나눠 갖는 것


8. 멀티프로세싱 ( Multiprocessing )

두 개 이상의 프로세서나 코어를 활용하는 시스템


예제를 보며 내용을 잘 이해 했는지 알아보고 넘어가 보자

예제에서 주어진 동작방식을 보고 멀티 태스킹, 멀티 스레딩, 멀티 프로세싱 세 항목에 대하여 O,X로 판별해 보자. ex ) 멀티태스킹 O 멀티스레딩 X 멀티 프로세싱 X

  • 싱글코어 CPU에 싱글-스레드 프로세스 두 개

    답 > 멀티 태스킹 O 멀티 스레딩 X 멀티 프로세싱 X
  • 싱글코어 CPU에 듀얼-스레드 프로세스 한 개

    답 > 멀티 태스킹 O 멀티 스레딩 O 멀티 프로세싱 X
  • 듀얼코어 CPU에 싱글-스레드 프로세스 두 개

    답 > 멀티 태스킹 X 멀티 스레딩 X 멀티 프로세싱 O
  • 듀얼코어 CPU에 듀얼-스레드 프로세스 한 개

    답 > 멀티 태스킹 X 멀티 스레딩 O 멀티 프로세싱 O
  • 듀얼코어 CPU에 듀얼-스레드 프로세스 두 개

    답 > 멀티 태스킹 O 멀티 스레딩 O 멀티 프로세싱 O

    => 현대와 가장 근접한 시스템


여기서 멀티태스킹이 아니라는 말은 이런 상황에서 동작 방식이 "멀티태스킹으로 동작하지 않았다" 라는 의미 (멀티태스킹이 가능한 시스템이 됐다가, 안됐다가 하는 on/off로 동작하는 것으로 착각하면 안됨 )


이게 기초라니 ㄷㄷ...

profile
내일부터 공부 해야지

0개의 댓글