[OS] 1주차

nerry·2022년 1월 13일
0

운영체제

목록 보기
2/7
post-thumbnail

#1

운영체제란?

HW 위, SW와 사용자 아래 위치하여 연결하는 SW 계층
위, 아래로 알맞는 인터페이스 제공

좁은 의미 : 커널 : booting 이후 메모리에 상주하는 부분
넓은 의미 : 커널 + 시스템 유틸리티 포함

운영 체제의 목표

  1. 편리하게 사용할 수 있는 환경 제공
    • 할당이 빠르게 교체되면서 이루어져 불편함을 느끼지 못함
  2. 자원을 효율적으로 관리 + 형평성 (자원 : 메모리(분할), CPU(스케줄링), I/O 등)
    • 자원 관리 필요 요소
      • 효율 : 주어진 자원으로 최대한 성능
      • 형평 : 자원 분배를 형평성 있게
    • 사용자와 OS 보호
    • 리소스 관리

운영 체제의 분류

1. 동시 작업 가능 여부

  • 단일 작업 Single Tasking (예전)
    한 번에 하나의 작업만 처리
    ex. MS-DOS
  • 다중 작업 Multi Tasking (현대)
    동시에 두 개 이상 처리

2. 사용자 수

➡️ 동시 접근 가능 여부

  • 단일 사용자 Single User
    : MS-DOS, MS-Windows
  • 다중 사용자 Multi User
    : UXIX, NTServer
    형평 효율 중심

3. 처리 방식

  1. 일괄 처리 Batching Processing (현대에 별로 X)
  • 작업을 모아서 한꺼번에 처리
  • 작업 종료까지 결과를 모름
  • Interactive X : 바로 해결, 처리 불가
    ex. Punch Card
  1. 시분할 Time Sharing (현대에 가장 흔함, 범용적)
  • CPU를 일정 시간 단위로 분할하여 사용
  • #1에 비해 짧은 응답 시간
  • Interactive함 : 빠르게 처리하면서 주어진 자원 최대 활용을 목적으로 함
  • 사람에 특화됨
  1. 실시간 Realtime
  • Deadline! 정해진 시간 안에 일이 반드시 종료돼야함
  • 특수 목적 system에서 주로 씀 : 원자로/공장, 미사일 제어, 반도체 장비(pipe line) 등
  • 시분할과 다른 점
    정해진 시간 내에 결과가 꼭 나옴
  • 개념 확장
    • 경성 실시간 시스템 Hard realtime system : 지켜지지 않으면 문제 발생
      최근 스마트폰도 이러한 OS가 필요해짐 ➡️ 네비게이션, 블랙박스 앱 (실시간성이 지켜져야 함)
    • 연성 실시간 시스템 Soft realtime system : 지켜지지 않아도 괜찮지만 Deadline이 필요함
      ex) 영화

몇 가지 용어

  • 유사 : 컴퓨터에서 여러 작업을 동시에 수행하는 것을 뜻함
    • Multitasking : CPU는 매번 한 task를 구동하지만, tasks를 시간 분할하여 할당하기 때문에 (하나가 종료되기 전, 다른 하나가 준비돼있음)
    • Mutiprogramming : 메모리 강조 관점, 여러 프로그램이 메모리에 같이 올라가 있음
    • Time sharing : CPU 강조 관점, 시분할
    • Multiprocess
  • Multiprocessor (== CPU) : 하나의 컴퓨터에 CPU가 여러개

운영 체제의 예

  • 유닉스 (대용량 PC): 여러 사용자, 여러 작업에서 출발
    • C언어로 작성 : OS 만드는게 어려워 특정 OS를 만들기 위해 탄생
    • 높은 이식성 (Portable하다) : ❓ 기계어로 만들지 않아서 기계어에만 국한돼있지 않기에 C언어로 다시 컴파일 하면 된다.
    • 최소한의 커널 구조
      ➡️ 핵심적인 것만 만들었기에 확장성이 용이함 : 복잡한 시스템에 맞게 확장 용이
    • 프로그램 개발에 용이
    • 서버 접속해서 쓸 수 있음 (서버를 위한 OS임)
    • 다양한 버전
      System V, FreeBSD
      Linux : 누구나 자유롭게 이용 가능 ➡️ 여러 환경에서 활용 가능 : 서버, PC
  • MS
    1. DOS (Disk Operating System)
    • 단일 작업용
    • 640kb의 주 기억 장치로 HW 발전 속도가 빨라서 한계가 커졌음
    1. MS Windows
    • 다중 작업용 GUI 기반 OS
    • 풍부한 지원 SW

+a apple의 ios 같이 소형 OS 등장

운영 체제 구조

  1. CPU
  • 어떤 작업을 할당
  • 짧은 시간 간격으로 줬다 뺐다 함
  1. Memory
  • 메모리 관리
  • 한정된 메모리 쪼개는 방법
  • CPU 보다 속도 느림 (이러한 간극 줄이기 위해 OS가 발전해옴)
  • 적어도 CPU에서 원활히 작업하도록
  1. Disk
  • 파일 보관 방법
  • 헤드 변경 (스케줄링 필요)
  1. I/O Device
  • 다른 I/O와 컴퓨터 간 정보 주고받기 어떻게 할지 (Interupt)

#3

System Structure & Program Execution

컴퓨터 시스템 구조

Computer

  • CPU
    한 clock 마다 memory의 한 instruction을 읽고 수행함
    메뉴얼대로 일하며 전체적인 통제는 OS가 한다.
    • 내부
      • Interrupt Line : instruction 하나 수행 후 한번 체크하는 곳
      • mode bit : CPU에서 실행되는 것이 OS인지, 사용자 pg인지 구분
        사용자 프로그램의 권한을 막아 OS나 다른 프로그램에 피해가 없도록하는 보호 장치
        CPU가 사용자 pg으로 넘어갈 때 설정해서 넘어감
        interrupt로 수행 종료 알릴 때나 Exception 발생시 H/W가 0으로 바꿔서 돌려줌
        • 1 사용자 모드 : 사용자 프로그램 수행행시 ➡️ 권한에 제한이 있음
        • 0 커널 모드 : OS 코드 수행시 ➡️ 모든 것을 수행 가능
      • registers : 메모리보다 빠르게 정보 저장
  • Memory
    CPU의 작업 공간
    • 사용자 프로그램 영역
    • OS 영역

연결 부분

  • DMA controller : interrupt의 빈도를 줄여 효율적이도록 함
    • 메모리를 직접 접근하는 장치. 작은 일마다 인터럽트가 발생하면 오버헤드
    • 인터럽트가 많은 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
    • CPU 중재 없이 device controller가 buffer 내용을 메모리에 block 단위로 전송
    • 해당 block 단위로 인터럽트 발생 ➡️ CPU가 인터럽트 당하는 빈도가 줄어 효율 올라감
  • memory controller : 여러 곳에서 메모리를 동시에 접근하여 충돌시 정리하는 곳
  • timer
    • 정해진 시간을 할당해 시간이 끝나면 OS에게 제어권이 다시 돌아오는 interrupt 발생
    • 제어권은 한번 넘어가면 뺏어올 수 없어 자동으로 돌려받기 위함
    • CPU가 독점당하는 것을 보호

I/O device

  • 사용자 프로그램이 하는 법 (직접 접근이 불가함)
    1. 시스템 콜 : OS에게 I/O 요청 - S/W interrupt
      본인이 직접 interrupt을 거는 것 (CPU를 OS에게 넘겨주기 위함)
      사용자 프로그램이 OS의 서비스를 받기 위해 (함수를 사용하기 위해) 커널 함수를 호출
    2. trap으로 인터럽트 벡터 특정 위치로 이동
    3. 제어권이 벡터가 가맄는 인터럽트 서비스 루틴으로 이동
    4. 올바른 I/O 요청인지 확인 후 수행 (OS가 확인)
    5. 완료시 제어권을 시스템 콜 다음 명령으로 옮김 - H/W interrupt
      해당 device controller가 interrupt을 통해 요청한 작업 완료를 알림
      이후로 OS가 이걸 요청한 program에게 input을 copy 해주고, CPU 돌려줌
  • device controller (각 device 별로)
    • 일종의 작은 CPU, 해당 장치를 관리
    • CPU와의 성능 차이로 내부 동작 제어를 위해 있음
    • local buffer을 가짐 : device와 I/O를 하는 부분
    • I/O가 끝나면 interrupt을 하는 곳
    • 세부
      • device driver 장치 구동기 (S/W)
        OS 코드 중 장치별 처리루틴
        device 인터페이스에 맞게 접근하도록 함
      • device controller 장치 제어기 (H/W)
        작은 CPU
  • 내부
    • Disk
      보조 기억 장치이지만, Input을 받고, Output을 저장해두기에 I/O 장치

인터럽트 Interrupt

당한 시점에 레지스터와 program counter을 저장 후 CPU의 제어를 인터럽트 처리 루틴에 넘김
현대 OS는 Interrupt로 구동됨

  • 종류
    • Interrpt 하드웨어 인터럽트 : 넓은 의미
    • Trap 소프트웨어 인터럽트
      • Exception : 프로그램의 오류로 발생 (ex. 0으로 나누는 연산)
      • System call : 프로그램이 커널 함수 호출 시
  • 용어
    각 인터럽트마다 하는 일이 다르고 종류가 많음
    • 인터럽트 벡터 : 해당 인터럽트 처리 루틴 주소 갖고 있음 ➡️ 일종의 table
    • 인터럽트 처리 루틴 : 해당 인터럽트 처리하는 커널 함수 ➡️ OS 코드에 정의돼있음

#4

동기식 입출력과 비동기식 입출력

동기식 입출력 Synchronous I/O

I/O 요청 후 입출력 작업 하나가 완료된 후에야 제어권이 돌아가는 것
I/O 의 결과를 직접 지켜보는 것

  • 구현 방법
    • 1
      I/O가 끝날 때까지 CPU 낭비, I/O도 하나
    • 2
      I/O 완료 전까지 해당 프로그램에서 CPU 뺐어서 다음 프로그램에게 줌
      CPU 낭비 없이 일 계속, 다음 프로그램에서 I/O 요청 중복 가능

비동기식 입출력 Asynchronous I/O

요청 후 작업이 끝나기를 기다리지 않고 제어를 사용자 프로그램에 즉시 넘김
CPU 제어를 다시 받아 I/O와 상관없는 작업을 함
결과 확인하지 않음. I/O와 무관하게 일을 함

➡️ 두가지 모두 I/O 완료는 인터럽트로 알림

서로 다른 입출력 명령어

  • 일반적인 I/O 방식
    메모리 접근 instruction + I/O special instuction
  • Memory Mapped I/O 방식
    메모리 접근 instuction으로 모두 처리
    I/O 부분도 메모리 연장 주소를 붙여서 처리한다.

저장장치 계층 구조

  1. Primary (Executable)
    CPU가 직접 접근해 처리 가능
    byte 단위로 접근 가능한 곳
  • Registers
  • Cache Memory : CPU와의 속도 차이를 완충하기 위함 ➡️ Cahing
  • Main Memory
  1. Secondary
    CPU 직접 접근 불가
  • Magnetic Disk
  • Optical Disk
  • Magnetic Tape

상위 계층으로 갈 수록

  • Speed ⬆️
  • 단위 공간당 Cost ⬆️, so 용량 ⬇️
  • 휘발성 Volatility ⬆️ : 전원이 나가면 날아간다.

프로그램의 실행 (메모리 load)

실행 파일을 file system에 저장함
후 메모리에 올라간다.

  1. Physical Memory
    모든 것을 올리는 것은 낭비. 당장 필요한 부분만 올라가 있음
    • User 영역
    • 커널 영역 : 항상 상주

Swap area (disk의 한 부분) : 메모리공간의 한계로 연장의 의미로 있음

  • 필요한 부분을 제외하고 저장함
  • 휘발성이라 전원이 나가면 의미가 사라짐
  1. Virtual Memory : 프로그램 만의 독자적인 메모리 공간 주소 (실제로 존재 ❌ )
    물리적 주소를 저장해두는 것
    file system에 올라간 파일의 메모리 공간 주소
    physical memory 접근시 Address Translation 필요 ➡️ 주소 변환 계층 (H/W에 존재)
  • 프로세스 별 주소 공간
    • stack : 함수 호출 과정시 데이터 쌓기 용도
    • data : 변수 등 자료 구조
    • code : 기계어
  • 커널 주소 공간 : 운영체제의 목표를 지킴, 마찬가지로 함수 구조임
    • code : 커널 코드
    • data
      • 각 프로그램 마다 자료구조 존재 ➡️ PCB
      • H/W마다 자료구조 만들어 관리
    • stack
      사용자 프로그램 별로 커널 스택 별도로 존재함
  1. File System (disk) : 비휘발성용. 내용 유지됨

사용자 프로그램이 사용하는 함수

  1. 사용자 정의 함수 : 프로그램에서 직접 정의한 함수

  2. 라이브러리 함수
    타인이 정의한 걸 갖다 쓴 함수

    컴파일하고 실행하면 둘다 실행파일에 포함돼있음. 즉, 프로그램 주소 공간에 있음
    ➡️ User Mode

  3. 커널 함수
    운영체제 프로그램 함수
    이걸 호출하는 것은 시스템 콜임

    커널 코드 안에 있음. 커널 주소 공간에서 실행
    ➡️ Kernel mode

profile
터벅터벅 개발(은좋은)자 로그

0개의 댓글