[OS] OS intro

써니·2023년 7월 8일
0

OS

목록 보기
1/2
post-thumbnail

운영체제 개요

  • 운영체제 없는 컴퓨터?
    • 동작 가능, but 처음 설계한대로만 동작 ⇒ 다른 기능 추가 불가, X 유연

운영체제가 하는 일

  1. 프로세스 관리

    • 여러 프로세스들을 관리 : 프로세스의 CPU 독차지 방지
    • 사용자 상호작용이 이루어지는 프로세스 외에는 백그라운드로 실행
  2. 메모리 관리

    • 모든 프로그램은 메모리에 올려서 관리하며 동작
  3. 하드웨어 관리

    • 사용자의 하드웨어에 대한 직접적인 접근 방지
    • 하드디스크의 특정 영역에 다른 중요한 데이터 보호

    운영체제의 판단 하에, 적절한 위치에 사용자의 데이터 저장

  4. 파일 시스템 관리

    • 하드디스크에 파일들을 효율적으로 저장 & 관리






운영체제의 역사

  • 1940 : ENIAC
    • 스위치와 배선 작업 → HW의 비용 ↑↑

      ⇒ CPU를 최대한 많이 사용할 수 있는 법?

  • 1950초 : IC (직접 회로) - 진공관과 전선으로 만들어진 논리 회로를 아주 작은 크기로 만듧
    • programmer : 펀치카드로 프로그램 작성
    • operator : 컴퓨터에 카드를 넣고 결과가 나오면 프로그래머에게 전달

1950중후반 : Single Stream Batch system

  • programmer가 펀치카드를 여러 개 제작
    → operator가 여러 개를 한 번에 컴퓨터에 전달
    → 컴퓨터는 여러 개의 프로그램을 순서대로 실행해서 결과를 한번에 확인할 수 있도록 개발

  • 한계 : CPU와 입출력을 분리하여도, 입력을 받기 위한 대기 시간에는 CPU의 사용률이 떨어진다

    • I/O Device Controller (입출력 관리자)
      • 입출력 시 CPU를 사용할 수 없는 점을 개선
      • 입출력 작업이 끝나면 CPU에게 interrupt 신호를 발신 ⇒ interrupt 신호 받은 CPU가 처리할 수 있도록
    • CPU와 입출력의 분리했지만 still 1 more problem
      • 입출력에도 CPU를 기다려야 하는 작업 있음
        • ex) 입력을 처리하는 작업일 때 입력이 전부 완료되어야만 처리할 수 있음

          이렇게 기다리는 시간에는 CPU의 사용률이 떨어짐



1960년도 : Time Sharing System (시분할 시스템)

  • **memory에 여러 program을 올려두고 시간을 나누어, 각 프로그램을 짧은 시간씩 돌아가며 실행

  • Single Stream Batch system의 한계 개선

    • 프로그램을 순서대로 하나씩 실행 X
    • 매우 빠르게 번갈아가며 실행 ⇒ 사용자에게는 전부 동시에 실행되는 것처럼 보이게 됨
    • A작업에서 필요한 입력 처리 위해 cpu가 대기할 때 b,c 작업 ⇒ cpu 사용률 높임
  • Terminal

    • 프로그램을 동시에 여러 개 실행할 수 있으니, 당시 비싼 컴퓨터 1대를 여러 사용자가 Terminal이라는 단말기를 통해 접근하여 사용
  • File System

    • 컴퓨터의 개인화 ⇒ 필요한 문서와 같은 개인 정보를 컴퓨터에 저장 ⇒ file system 등장
  • UNIX

    • C언어로 UNIX 운영체제 개발 (AT&벨 연구소)

    • Multi-programming, Multi-user, File system 구현



Time Sharing System의 한계 (Base Register의 등장)

  1. 메모리 침범

    • 한 program이 다른 program 메모리 침범 시 원하지 않는 결과 발생,
      OS영역까지 침범할 경우 치명적인 오류 발생 가능
  2. 메모리 주소 할당

    • 기존 1 메모리 : 1 program) 메모리 주소를 program 1개로 가정하고 개발
    • Time Sharing System) program이 어느 메모리 위치에서 실행할지 모름

Base Register : program의 시작주소를 저장 “모든 프로그램은 0번지에서 실행한다”고 가정



1970년도 이후 : 개인 컴퓨터 → GUI





운영체제의 구조

이미지 출처 : https://math-coding.tistory.com/80

  1. Kernel : process, memory, storage를 관리하는 핵심 기능

  2. Interface : 사용자는 interface를 통해서 OS의 Kernel에 접근 가능 (직접 접근 불가)

    • GUI, CLI

⇒ user/application - system call - kernel - driver - HW

  • system call
    • kernel이 사용자로부터 자신을 보호하기 위한 interface
    • application은 system call을 통해 Kernel에 접근가능
      • kernel에서 제공하는 write함수를 사용
        → OS가 알아서 하드디스크의 빈 공간에 정보 저장
  • driver
    • 보통 HW 제조사에서 driver 제공
      (OS는 많은 종류의 HW를 전부 지원해야 하기 때문에 각각의 하드웨어에 맞는 프로그램을 Kernel이 모두 갖고 있기 어려움)
    • mouse, keyboard 같은 기본적인 HW 장치들은 kernel에 포함





컴퓨터 하드웨어와 구조 (CPU, RAM/ROM, BUS)

von Neumann (폰 노이만 구조) : CPU - BUS - Memory(RAM)

  • BUS : 데이터를 전달하는 통로
  • 프로그램 내장 방식 : 프로그램을 메모리에 올려서 사용
    (↔️ 하드웨어로 프로그램 만들기 = 프로그램이 달라질 때마다 스위치와 배선 재조정 필요


0. Main Board : 다른 하드웨어를 연결하는 장치

  • 장치 간 데이터 전송 ⇒ 메인보드의 BUS가 담당



1. CPU (중앙처리장치)

  • ALU (Arithmetic and Logic Unit) : 실제 데이터 연산 담당 (산술논리 연산장치)

  • Control Unit : 모든 장치들의 동작을 지시하고 제어하는 장치

  • Register : CPU 내 계산 위해 임시로 보관하는 장치

    • Program Counter (PC)
    • Memory Address Register
    • Memory Buffer Register
    • Instruction Register (IR)

2. Memory (주기억장치) : RAM & ROM

RAM : Random Access MemoryROM : Read Only Memory
데이터 저장된 위치 상관없이, 읽는 속도 동일데이터 한 번 쓰면 수정 불가
(데이터 읽기만 가능)
Main memory로 사용컴퓨터 부팅과 관련된 BIOS를 저장에 사용
전력이 끊기면 데이터 유실전력이 끊겨도 데이터를 계속 보관



2-1) Cache Memory : CPU와 주기억장치 사이의 속도차이 완화 시키기 위한 고속 buffer memory



2-2) 주기억장치(RAM/ROM) & 보조기억장치

주기억장치 ( Computer/Primary Memory )보조기억장치 ( Auxiliary/Secondary Memory )
PC 내부에서 CPU가 처리하고 있는 내용 저장저장된 데이터가 사라지지 않고 영구적으로 보관
용량 큼
처리속도 빠름주기억장치보다 느림
CPU명령에 의해 기억된 장소에 직접 접근하여 읽고 씀물리적인 디스크가 연결되어 있음
RAM, ROMHDD, SSD





컴퓨터의 부팅과정

  • 전원
    → ROM에 저장된 BIOS 실행
    → 하드디스크에 있는 MBR (Master Boot Record)에 저장된 Boot Loader를 RAM으로 가져와 실
    → OS 2개 이상일 경우 OS 선택
    → OS를 RAM으로 불러와 실행
    → 이후 실행되는 모든 program은 OS가 관리

  • BIOS : 전원, CPU, 메모리, 하드디스크 등 주요 HW에 이상이 없는지 체크

    • 이상 발견 시 오류 내며 부팅 X





Interrupt (인터럽트)

  • if) CPU가 입출력장치에 데이터를 Read/Write하는 상황

    • CPU : 입출력 작업이 들어오면 → 입출력 관리자에게 입출력 명령
  1. Polling 방식 : CPU 입장에서는 입출력 명령이 언제 완료될 지 알 수 없기 때문에 주기적으로 확인 필요

    • 단점 : 주기적으로 CPU가 확인해줘야 하기 때문에 성능 좋지 못함
  2. Interrupt 방식 : CPU가 입출력 관리자에게 입출력 명령을 내리고 다른 작업 지속

    • 입출력 관리자는 입출력이 완료됐을 때 CPU에게 신호를 전송
      ⇒ CPU는 그 신호를 받아 ISR (Interrupt Service Routine)을 실행시켜 작업을 완료함
      • ISR (Interrupt Service Routine) : 특정 Interrupt가 들어오면 그것을 처리하는 함수
    • HW Interrupt : keyboard, 마우스 입력, 디스크 입출력, 프린터

    • SW Interrupt : 사용자 program에서 발생한 interrupt

      • ex) 유효하지 않은 메모리 접근, 0으로 나누기





Q. Program vs Process vs Thread

  • Program : 컴퓨터 디스크에 저장된 정적인 file (보조기억 장치)


  • Process : 프로그램이 메모리에 올라가, 실제로 실행 중인 동적인 entity

    • Program + 실행에 필요한 자원 할당 ⇾ Process

    • OS로부터 할당 받는 자원 :
      1. CPU 시간
      2. 운영되기 위해 필요한 주소 공간
      3. 독립된 메모리 영역 (Code/Data/Stack/Heap 구조)

    • 각 Process 별 별도의 주소 공간 & 독자적인 메모리 공간 ⇾ 다른 Process의 변수/자료구조에 접근 불가

    • IPC (Process간 통신) : 다른 Process의 자원에 접근 허용

    • Process : min 1 Thread = Main Thread



  • Thread : Process가 할당받은 자원을 이용하는 실행 단위 / Process의 특정한 수행 경로 / Process 내 실행되는 여러 흐름의 단위

    • Main thread : Process 내 존재하는 최소 1개 thread
    • 각 thread 별 독자적인 register & stack memory 보유
    • thread들은 Code, Data, Heap 공유
    • Process 내의 주소공간/자원들 공유
    • 1 thread가 process 자원을 변경하면 다른 sibling thread(이웃 thread)도 그 변경 결과를 즉시 볼 수 있다
    • memory를 공유하기 때문에 동기화 , deadlock 등의 문제 발생 가능
    • 관련 library : POSIX Pthreads, Windows threads, Java threads
      ProcessThread
      정의실행 중인 programProcess의 실행 단위
      생성/종료시간많은 시간 소요적은 시간 소요
      Context Switching많은 시간 소요적은 시간 소요
      상호작용IPC 사용공유 memory 사용
      자원소모많음적음
      메모리 내 독립성각각 독립적프로세스 내 stack/register 독립적, 이외 공유



Q. Processor & Multi-Processing & Multi-Threading

  • Processor = CPU : computer 내 program을 수행하는 HW Unit (명령어 해석하는 한 부분)

  • Process의 동시성 & 병렬성 (Concurrency & Parallelism)

    • processor는 한번에 1개의 process만 실행

    • 동시성 = Context Switching : processor 하나가 program 1,2,3,4 여러 작업을 돌아가며 일부분씩 수행하는 방식

    • 병렬성 = Processor 1Core 여러 개가 달려서 각각 동시에 작업하는 방식

      • "dual-core"/"quad-core"/"octa-core" 등의 명칭의 processor가 달린 컴퓨터에서만 할 수 있는 방식



  • Multi-tasking : 동시에 여러 개의 program 실행
  • Multi-processing : 응용프로그램을 여러 개의 process로 구성 ⇒ 각 process가 1개의 task 처리하도록
Multi - ProcessingMulti - Threading
정의응용 프로그램 1 → 여러 개의 process응용 프로그램 1 → 여러 개의 thread
장점
process에 문제가 발생하면 그것의 자식 proecss만 죽음(다른 영향 x)

1. System 자원 소모 감소 (자원 효율성 증대)

(process를 생성하여 자원 할당하는 system call이 줄어들어 자원을 효율적으로 관리할 수 있음)

2. System 처리량 증가 (처리 비용 감소)

( Thread 간 data 교환이 간단해지고 system 자원 소모 감소, Thread 사이 작업량이 작아 Context switching이 빠름)

3. Program 응답 시간 단축

(Process 내 stack 이외 모든 memory를 공유하므로 통신의 부담 적음)
단점
1. Context Switching 과정에서 cache memory 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드 발생

( process 사이에 공유하는 memory가 없음 → Context Switching발생 시 cache에 있는 모든 data를 모두 reset하고 다시 cache 정보를 불러와야 함)

2. Process 간 IPC 통신할 때, process 간 변수 공유 불가

(process가 각각 독립된 memory 영역을 할당받았기 때문에)

1. 주의 깊은 설계 필요

2. 까다로운 디버깅

3. single process system 은 큰 효과 X

4. process 밖에서 thread 각각 제어 불가

5. 자원 공유의 문제 발생 (동기화 문제)

6. Thread 1개의 문제가 전체 Process에 영향



주제와 관련한 cs 질문

  • CPU 사용률 관점에서 시분할 시스템과 입출력 관리자의 역할에 대해 설명하시오
    • 시분할 시스템과 입출력 관리자 모두 CPU의 사용률을 높이기 위해 고안된 것
    • 기존의 single stream batch system은 입출력이 모두 끝날 때까지 CPU를 사용할 수 없었기 때문에 입출력 관리자를 통해 입출력을 분리함으로써, cpu의 사용률을 높일 수 있었다
    • 하지만 여전히 입출력이 끝날 때까지 cpu가 대기해야
  • 멀티 프로세싱과 멀티 스레딩의 장단점에 대해서 설명하시오
    • 멀티 프로세싱의 경우, 프로세스가 독자적인 메모리와 주소 공간을 갖고 있으므로, 하나의 프로세스의 오류가 다른 프로세스에 영향을 주지 않아 안정적이다. 하지만 프로세스 간 메모리가 공유 되지 않아, context switching 비용과과 ipc 비용이 크다
    • 반면 멀티 스레딩의 경우, 스레드들이 stack영역을 제외한 메모리를 공유하여 스레드 간 데이터 교환이나 context switching이 빠르게 이루어질 수 있다. 반면 이것이 단점이 되어 동기화, deadlock 등의 오류가 발생할 수 있다.



Q. Interrupt : 비동기 방식 ⇒ 성능에 이점? DMA Controller?

Q. booting -> BIOS vs UEFI?

Q. core 란?











0개의 댓글