[cs] 운영체제

괴발·2022년 11월 25일
0

CS

목록 보기
2/4

01 운영체제와 컴퓨터

운영체제의 역할과 구조

운영체제란

컴퓨터는 크게 물리장치(하드웨어)와 프로그램(소프트웨어)으로 나뉘는데, 운영체제란 물리장치를 효율적으로 사용하도록 관리하는 프로그램이다.

물리장치 = 하드웨어 = 시스템자원 = CPU, 메모리, I/O, Disk...

운영체제를 사용함으로써 사용자는 프로그램 실행을 더 쉽게 이용할 수 있고,
컴퓨터 시스템을 더 효율적으로 사용할 수 있게 해준다.

운영체제의 역할

  • 사용자를 위한 역할
    • 사용자가 컴퓨터 시스템을 편리하게 사용할 수 있는 인터페이스를 제공 (GUI/CLI)
  • 하드웨어를 위한 역할
    • 하드웨어 관리 목적 : 시스템 자원을 효율적으로 사용하는 것
    • 프로세스 관리
      • 시분할 방식
      • CPU 스케줄링
    • 메모리 관리
      • 고정분할방식
      • 가변분할방식
      • 가상메모리방식
    • 하드웨어 관리
      • 디스크 관리
      • I/O 디바이스 관리

운영체제의 구조

메모리 자원은 한정적이므로 효율적으로 사용해야한다.
운영체제 같은 큰 프로그램이 메모리에 모두 올라간다면 공간부족에 시달리므로 필요한 것만 메모리에 올려 사용하게 된다.
이때 메모리에 상주하는 운영체제에 부분을 커널 이라 한다.
커널은 운영체제 코드 중 핵심 부분이며 좁은의미로 운영체제라고 할 수도 있다.


운영체제는 크게 인터페이스커널로 나눌 수 있다.

인터페이스사용자가 커널에 직접 접근할 수 없기에 인터페이스를 통해 커널에 접근할 수 있다. 사용자는 인터페이스를 통해 커널에 명령을 전달하고 인터페이스를 통해 실행결과를 전달받는다. 대표적인 인터페이스로 GUI 와 CLI가 있다.
GUI : 단순명령창이 아닌 아이콘을 마우스로 클릭하는 동작으로 컴퓨터와 상호작용할 수 있다
CLI : 한국에서는 CUI로 잘못알려져 있는데 실제로는 CLI이다. 원하는 명령어를 입력하여 상호작용하는 인터페이스로 대표적으로 '리눅스'가 있다.

커널 은 프로세스, 메모리, 저장장치를 관리하는 핵심기능으로 시스템콜, 드라이버가 있다.

1) 시스템 콜(system call)
커널이 자신을 보호하기 위해 만든 추상화 계층 인터페이스. 하드웨어로 직접적인 접근을 막기위해 시스템콜이라는 시스템 자원 사용과 관련 함수를 제공한다. 이는 프로세서의 기능 중 하나인 인터럽트(Interrupt) 중 하나이다.

  • 프로그램에서 시스템콜에 I/O요청을 하면 시스템콜이 정상적인 요청인지 확인한 후,
    modebit를 이용하여 커널의 접근을 허용한다. ( 유저모드 ⇨ 커널모드 )
  • 커널모드에서 파일시스템에 접근하여 파일을 읽은 후 다시 시스템콜에서 modebit를 이용하여 다시 유저모드로 변경한다.
  • 시스템콜은 읽어온 데이터를 프로그램에 전달한다.

컴퓨터의 요소

컴퓨터는 전자 회로를 이용하여 프로그램과 정보를 전자적 형태로 저장-계산하고, 입력된 데이터를 정해진 프로그래밍에 따라 처리하고 정보로 출력하는 전자 기기로 CPU, DMA컨트롤러, 메모리, 타이머, 디바이스 컨트롤러 등으로 이루어져 있다.

컴퓨터 구성요소로는
연산을 담당하는 CPU
기억을 담당하는 Memory
다양한 입출력 장치 I/O Device 로 구분된다.

CPU

중앙처리장치. 기본적으로 연산 담당이다. 인터렙트에 의해 메모리제 존재하는 명령어를 읽고 실행하며 컴퓨터의 뇌에 해당한다.
구성은 산술논리연산장치(ALU) 제어장치 레지스터 로 되어있다.

산술논리연산장치(ALU)
산술연산, 논리연산을 수행

제어장치
명령을 해석하고 제어신호 전달.
명령어의 실행(Instruction Cycle) 단계 : 인출(Fetch) 단계, 간접(Indirect) 단계, 실행(Execute) 단계, 인터럽트(Interrupt) 단계

레지스터
속도가 매우 빠른 기억장치. 데이터 혹은 주소를 저장하여 연산속도를 향상시키기 위해 사용된다.

CPU의 연산처리
1) 제어장치 : 메모리 또는 레지스터에 계산할 값 로드.
2) 제어장치 : 산술논리연산장치에 레지스터에 있는 값을 계산하라 명령
3) 제어장치 : 결과값을 다시 '레지스터에서 메모리에' 저장

인터럽트 Interrupt
끼어들기,가로막기. 컴퓨터에서 발생한 이벤트를 CPU에 보내는 신호.
인터럽트가 발생하면 CPU는 하던 작업을 멈추고 즉시 인터럽트를 처리해야 한다. 이 과정은 인터럽트를 인터럽트 서비스 루틴 = 인터럽트 핸들러 에 저장함으로써 해결한다. 반대되는 개념으로는 대상을 주기적으로 감시하여 이벤트가 발생하면 해당 처리 루틴을 실행시키는 폴링이 있다.
인터럽트는 그 안에 우선순위가 나뉘고 우선순위에 따라 실행된다.
일단 인터럽트가 접수되면 해당 인터럽트를 인터럽트 서비스 루틴 = 인터럽트 핸들러 의 코드를 찾고 실행에 옮긴다. 인터렙트 핸들링이 종료되면 이전 상태로 복귀한다.

DMA컨트롤러
I/O 디바이스가 메모리에 직접 접근할 수 있도록 하는 하드웨어 장치.
CPU에 너무 많은 인터렙트 요청이 들어와 부하에 걸리는 걸 막아주는 CPU 보조일꾼.

메모리
전자회로에서 데이터나 명령어 등을 기록하는 장치. 보통 RAM을 말한다.
컴퓨터가 실시간으로 사용하는 정보를 저장한다.


02 메모리

컴퓨터 메모리 또는 랜덤 액세스 메모리(RAM)은 시스템 단기 데이터 스토리지로 정보를 빠르게 엑세스 할 수 있도록 컴퓨터가 사용하는 실시간 데이터 정보를 저장하는데 사용된다. 시스템에서 많은 프로그램을 실행할 수록 많은 메모리를 필요로 한다.

이런 한정적인 자원인 메모리를 효율적으로 사용하기 위해 메모리를 필요에 따라 구분했는데 이걸 메모리 계층 이라한다.

메모리 계층

메모리를 필요에 따라 여러 종류로 구분해 둔 것을 말한다. 이를 통해 CPU가 메모리에 더 빠르게 접근이 가능하다.

레지스터 : 가장 작은 메모리. 휘발성. 가장 빠른 속도.
캐시 : 휘발성. 속도 빠름. 자주 사용하여 미리 복사해둔 데이터의 임시저장소. 보통 병목현상을 줄이기 위해 캐시를 저장해 둔다. 이를 통해 계산 시간을 줄일 수 있다.
실제 메모리와 CPU사이 속도 차이가 크기 때문에 중간에 레지스터를 두어 간격을 줄인다. 이처럼 속도 차이를 줄이기 위해 계층과 계층 사이의 계층을 캐싱계층이라고 한다.

캐싱계층 없이 캐시를 직접 설정하기 위해선 시간지역성공간지역성 을 기반으로 설정해야한다.

시간지역성
최근 사용한 데이터에 다시 접근하려는 특성

공간지역성
최근 접근한 데이터나 가까운 데이터 공간에 접근하려는 특성

캐시에서 원하는 데이터를 찾으면 캐시히트
캐시에 원하는 데이터가 없으면 캐시미스

캐시가 히트 되기 위해 정보를 받는 방법을 캐시매핑 이라고 하며
공간이 작은 레지스터를 캐시 계층으로써 효율적으로 사용하기 위한 방법이다.

  • 직접매핑 : 캐시에 저장된 데이터가 메인 메모리에서와 동일한 배열을 가지도록 매핑하는 방식. 단순하고 탐색이 쉬워 처리가 빠르다. 적중률이 낮고 충돌 발생이 잦다.
  • 연관매핑 : 캐시에 저장된 데이터는 메인 메모리 순서와 연관이 없고 비슷한 정보끼리 정렬한다. 높은 적중률과 충돌이 적지만 모든 블록을 탐색해는 복잡성을 갖고 있어 시간이 오래걸린다.
  • 집합 연관 매핑(세트연관매핑) : 순서는 일치시키지만 세트를 구성해 저장하고 블록화 되어있어 검색이 효율적이다.


웹 브라우저의 캐시

쿠키
만료값이 있는 키-값 저장소. 4kb 용량. 만료기간 지정 가능. 쿠키설정 시 document.cookie로 쿠키를 가리는 httponly 옵션을 거는게 중요. 클라이언트 또는 서버에서 만료기한 설정이 가능하다.(보통 서버에서 지정)

로컬스토리지
만료기간이 없는 키-값 저장소. 10mb용량. 브라우저를 닫아도 유지. 도메인 단위의 생성-저장.

세션스토리지
만료기한이 없은 키-값 저장소. 5mb용량. 탭을 닫으면 데이터 삭제.


데이터베이스의 캐시
데이터 베이스를 구축할 때도 메인 데이터 베이스 위에 레디스(redis)를 캐싱 계층으로 두어 성능을 향상 시키기도 한다.

메모리 관리

운영체제의 대표적인 역할. 한정된 자원인 메모리를 효율적으로 활용해야 한다.
메모리는 프로세스가 메모리 주소를 직접 참조하는 것이 아니라 프로세스의 주소공간과 메모리의 주소공간을 연결하여 사용하기 때문에 빠르게 메모리 참조(논리 주소와 물리주소를 연결하는 것) 하는 것이 필요하다. 이를 위해 가상 메모리를 사용한다.

가상메모리
물리 메모리 크기의 한계를 극복하기 위한 것. 주기억장치와 보조기억장치 등 모든 메모리 자원을 추상화 하여 프로세스 처리 시 실제로 사용하는 데이터는 메인 메모리(RAM)에 저장하고 나머지 데이터는 보조기억장치로 이동하여 남은 RAM을 사용할 수 있게 만드는 방법.

스와핑 swapping
RAM에서 당장 사용되지 않은 데이터는 보조기억장치로 옮겨지는데 이중 데이터 일부를 보조기억장치에서 끌어다 쓰는 방식을 스와핑 이라고 한다. 이는 페이지폴트를 방지하는 방법으로 사용된다.

페이지폴트(pageFault)
프로세스의 주소 공간에는 존재하지만 지금 RAM에는 없는 데이터에 접근했을 때 발생하는 현상.

스레싱 thrashing
메모리에 많은 프로세스가 동시에 올라가게 되면 스와핑이 일어나고 이는 페이지폴트율을 높여 성능저하를 초래한다.
이를 해결하기 위해서는 메모리를 늘리거나 ssd를 사용하는 방법이 있고,
운영체제에서는 작업세트와 PFF 방식이 있다.

작업세트
지역성에 따른 프로세스가 사용한 데이터들을 묶은 페이지 집합을 만들어 미리 메모리에 로드해 두는 것.

PFF(Page Fault Frequency)
프레임의 상한선과 하한선을 정해 상한선 도달 시 프레임을 늘리고 하한선 도달 시 프레임을 줄이는 방법.

프레임(frame) 실제 메모리를 사용하는 최소단위.

메모리 할당
프로그램을 메모리에 할당할 때 시작 메모리 위치, 할당 메모리의 크기를 기반으로 할당하는데 연속할당과 불연속할당으로 구분된다.

  • 연속할당
    • 메모리에 프로세스가 순차적으로 공간을 할당하는 것
      • 고정분할방식 : 미리 메모리를 나누어 관리. 융통성 없고 내부단편화 발생.
        • 내부단편화 : 미리 나누어둔 메모리가 프로그램이 실제 차지하는 메모리 보다 커서 사용하지 못하는 메모리가 발생하는 현상.
      • 가변분할방식 : 프로그램의 크기에 맞춰 메모리를 나누는 것. 내부단편화 발생이 없고 외부단편화는 발생할 수 있다. 배치 전략으로 최초적합, 최적적합, 최악적합이 있다.
        • 외부단편화 : 프로그램이 메모리보다 커서 들어가지 못하는 공간이 발생.
  • 불연속할당
    • 분산메모리할당 이라고도 하며 현대 컴퓨터 시스템이 사용하는 메모리할당 방식
      • 페이징 Paging
        • 프로그램 주소공간을 동일 크기의 page 단위로 나누어 물리메모리의 서로 다른 위치에 page를 저장하는 방식. 홀(hole) 크기는 균일해지지만 주소변환이 복잡해진다는 문제가 있다.
          홀(hole) 할당할 수 있는 비어있는 메모리 공간
      • 세그멘테이션 segmentation
        • page 단위가 아니라 의미 단위의 segment 단위로 나누는 방식. 프로세스는 코드, 데이터, 스택, 힙 등으로 이뤄져 있는데 코드, 데이터 기반 뿐만 아니라 함수 단위로도 나눌 수 있음을 의미한다. 공유,보안 측면에서 좋아지지만 홀(hole)크기가 균일하지 않다는 문제가 발생한다.

페이지 교체 알고리즘
스와핑의 발생율이 적어야 메모리를 효율적으로 이용하는 것이다. 페이지 교체 알고리즘을 어떻게 설계하느냐에 따라 스와핑 발생율이 조절된다.

  • FIFO(First In First Out)
    선입선출. 가장 먼저 온 페이지를 가장 먼저 교체한다.
  • LRU(Least Recentle Used)
    참조가 가장 오래된 페이지를 바꾼다. '오래된'을 파악하기 위해 페이지마다 계수기, 스택을 두어야 하는 단점이 있다.
  • NUR(Not Used Recently)
    LRU에서 발정한 알고리즘으로 최근 참조된 페이지는 1 아닌 페이지는 0으로 두어 시계방향으로 페이지를 돌면서 0을 찾고 0을 찾으면 프로세스를 교체하고 1로 바꾼다.
  • LFU(Least Frequently Used)
    참조가 가장 적은 페이지를 교체한다. 가장 사용하지 않는 것을 교체하는 것이다.

03 프로세스와 스레드

프로세스는 컴퓨터에서 실행중인 프로그램을 말한다.
스레드는 프로세스 내 작업 흐름을 말한다.
프로그램이 메모리에 올라가면 인스턴스화 되고 이후 cpu 스케쥴러에 따라 cpu가 프로세스를 실행한다.
프로그램 -> 프로세스 -> 스레드
인스턴스화 : 시스템 자원을 최적화하기 위한 사용자 지시 프로세스

프로세스와 컴파일 과정

프로그램이란 컴파일 과정을 거쳐 기계어로 번역되어 컴퓨터가 실행할 수 있는 파일이 되는 것을 말하며, 컴파일 과정은 다음의 흐름으로 진행된다.

프로세스의 상태

프로세스와 메모리 구조

PCB

멀티프로세싱

스레드와 멀티스레딩

공유자원과 임계영역

교착상태


04 CPU 스케줄링 알고리즘

비선점형

선점형


면접대비 질문-답변

운영체제와 컴퓨터

  • a. 운영체제란 무엇인가요?

  • b. 운영체제의 역할은 무엇인가요?

  • c. 알고 있는 운영체제 예시를 말씀해주세요

    • 윈도우OS, 맥OS, Linux, Unix, IOS, AOS 등
  • d. 컴퓨터 부팅 시 운영체제의 실행과정을 설명 할 수 있나요?

    • 전원 버튼을 누르면
    • CPU ON -> CPU가 주기억장치 ROM(비휘발성 메모리)에 있는 BIOS 데이터를 읽어온다.
      BIOS (Basic Input/Output System) 하드웨어 장치와 OS 사이에 위치하여 운영체제(OS)가 하드웨어의 I/O를 제어할 때 BIOS를 통해 제어하게 된다. 펌웨어 라고도 함.
    • BIOS는 CPU를 제외한 메모리, 디스크 등을 검사하는 POST(Power On Self Test) 과정을 진행 -> 부팅할 수 있는 보조기억장치(USB, 디스크...)를 선택함.
      부팅우선순위(Boot Order Priorities)에 따라 부팅할 보조기억장치를 찾는다.
      POST 과정에서 오류가 생기면 경고음 발생(삡-삡-삡)
    • 부팅할 보조기억장치를 선택하여 하드디스크의 MBR에 저장된 부트로더(Boot Loader)를 실행 -> 부트로더가 MBR 내부의 OS를 RAM에 로드한다.
      MBR(Master Boot Record) Disk의 첫 섹터
      부트로더(Boot Loader) 운영체제 코드를 읽어와 메모리에 저장시키는 역할

    • 컴퓨터 전원이 들어오면 가장 먼저 펌웨어 실행. 펌웨어는 모든 컴퓨터 구성요소를 메모리에 저장하여 관리하게 해주는 프로그램.
    • OS 운영체제의 핵심인 커널 실행.
    • 커널 수행 완료 후 쉘(shell)이 실행되며 부팅 종료. 쉘은 운영체제의 일부로 커널에게 명령을 해석하여 전달하는 역할
  • a. 운영체제란 무엇인가요?

  • b. 운영체제는 어떤 구조로 이루어져 있나요?

  • c. 커널의 시스템 콜에 대해 설명하실 수 있나요?

  • d. 시스템 콜은 프로세서의 인터럽트 중 하나입니다. 인터럽트가 뭔지 설명하실 수 있나요?

  • cpu 명령어 수행과정을 순서대로 말할 수 있나요?
    • 명령어 인출->해독->실행->결과값 저장
  • 다음 중 컴퓨터의 CPU에 있는 레지스터(register)에 관한 설명으로 옳지 않은 것은?
    • 계산 결과의 임시 저장, 주소색인 등 여러 가지 목적으로 사용될 수 있는 레지스터들을 범용 레지스터라고 한다.
    • 주기억장치보다 저장 용량이 적고 속도가 느리다...
    • ALU(산술/논리장치)에서 연산된 자료를 일시적으로 저장한다.
    • 프로그램 카운터는 다음에 수행할 명령어의 주소를 저장하는 레지스터이다.
  • 커널이 뭔지 설명해주세요.

메모리

  • 메모리 계층에 대해 설명해보세요
  • 캐시 관리에서 캐싱계층을
  • OS운영체제의 대표적 역할 중 하나는 메모리 관리인데요. 메모리 관리 방법 중 가상 메모리가 무엇인가요?
  • 메모리 성능을 향상시키기 위해 어떻게 해야 할까요?
    • 메모리 자체를 늘리기
    • hdd 대신 ssd로 교체하기
    • 운영체제에서 작업세트나 PFF를 설정하기
  • 페이지폴트가 발생할 경우 이를 방지하기 위해 어떻게 할 수 있을까요?
  • 페이지와 프레임의 차이를 말씀해주세요

프로세스와 스레드

  • 프로세스와 스레드를 설명해주세요

    • 프로세스는 실행파일이 메모리 공간을 할당받은 상태를 말하며, 스레드는 프로세스 내부에서 메모리를 공유하는 프로세스 실행의 흐름.
  • 프로세스를 실행하다가 오류가 발생해서 강제로 프로세스가 종료된다면 다른 프로세스는 어떤 영향을 받을까요? 그럼 스레드가 강제 종료된다면 다른 스레드는 어떤 영향을 받을까요?

    • 프로세스는 각각 할당받은 메모리 영역이 다르기 때문에 하나의 프로세스가 종료되어도 공유하는 파일이 손상되지 않는다면 다른 프로세스는 영향을 받지 않는다. 하지만 스레드 같은 경우는 프로세스 내부에서 자원을 공유하며 작동하기 때문에 하나의 스레드에 오류가 발생한다면 다른 스레드들 또한 강제 종료된다.
  • 멀티스레드를 설명해주세요.

  • PCB가 뭔가요?

CPU 스케줄링 알고리즘




참고
운영체제
https://eclipsemode.tistory.com/71
https://chanhuiseok.github.io/posts/cs-1/
https://kjhoon0330.tistory.com/entry/운영체제OS-운영체제란-무엇인가
https://velog.io/@msg016/운영체제-기본개념-인터럽트
컴퓨터요소
https://cloudstudying.kr/lectures/183
https://cozy-dandelion.tistory.com/7
https://ko.wikipedia.org/wiki/인터럽트
메모리
http://itnovice1.blogspot.com/2019/09/cache.html
https://velog.io/@yu-jin-song/CS-메모리-계층-구조
https://ko.wikipedia.org/wiki/메모리_계층_구조
https://beeehappy.tistory.com/m/53
https://velog.io/@sawol/메모리-관리
https://velog.io/@tjdud3550/CS-운영체제
프로세스와 스레드
https://velog.io/@raejoonee/프로세스와-스레드의-차이

profile
괴발개발

0개의 댓글