[운영체제] #2강

Junyoung Park·2022년 8월 1일
0

운영체제

목록 보기
2/25
post-thumbnail

1. OS의 역사

  • 컴퓨터: Compute + -er
  • 앨런 튜링

무어의 법칙

  • HW의 가파른 변화 양상 - 2년마다 트랜지스터의 수가 2배 가량 빨라진다는 관측 결과(연산 능력의 매우 빠른 발달)

컴퓨터의 세대

: 진공관 → ... → ULSI(현재의 데스트탑 및 랩탑)

"손으로 직접" 코드를 넣는 구조 ~ 시분할 기법까지 발전하게 됨

1. Hand-Operated System

  1. 원시적 기기
  2. 스위치 / 플러그 보드 / 와이어링
  3. 기계어로 적힌 프로그램: 운영체제 X, 저장장치 X
  4. 펀치 카드: 프로그래밍한 카드를 통해 컴퓨터 구동

2. Mainframe

  • 중앙집중형 대형 컴퓨터: 진공관보다 직접된 형태
  • 배치 / 시분할 지원

2. OS의 컨셉

Batch

  • 매우 단순한 OS
  • 시작 작업(Job) 완료 후에야 다음 작업 수행 가능
  • 펀치 카드 → 메모리 적재 → 작업 수행
  • 사용자와의 상호 작용 X
  • 사람이 직접 작업을 어떤 순서대로 할지 스케줄링

중간에 작업 결과를 확인할 수 없는 배치 작업

Job Swtiching Issue

  • 이전 작업이 종료될 때까지 기다려야 한다.
    → 여러 프로그램을 컴퓨터에서 순차적으로 실행시키기
    → 작업 A 종료 후 바로 다음에 작업 B 자동 실행 가능!
    작업 순서를 결정하는 방법(멀티 프로그래밍)이 필요함

I/O in the middle of job

  • 기계적 I/O와 전기적 CPU 간의 속도 차로 인한 비효율적 구조(CPU idle time이 길어지게 됨)
    → I/O와 CPU 연산을 동시에 진행하는 스풀링(Spooling, Simultaneous peripheral operation online)
    → "버퍼"에 미리 작업을 로드할 수 있어야 함 (E.g. 프린터 버퍼에 출력할 문서가 대기 중, CPU는 다른 작업을 수행 가능)
    → 비동기적 I/O + 연산에는 적합한 스풀링은 "동기적" 작업에 적합하지 않음(인쇄 도중 작업을 읽어야 하거나 수정이 필요한 의존적 상황이 일어날 때)

Multiprogramming

  • 2개 이상의 작업을 '동시'에 실행 → 실제로 작업 A와 작업 B가 함께 작동하는 것이 아니라 메모리 내 같이 적재 + 수행 가능하다는 의미의 Concurrency
  • CPU 활용 극대화: CPU의 idle time을 최소화(배치 방식과 차별화). 특히 특정 작업의 I/O가 필요한 시간에 다른 작업을 수행 가능

배치와는 다르게 "노는 시간"을 CPU에게 주지 말자!

  • Voluntary yield에 의존적인 스위칭: 의도적으로 I/O를 요청하지 않거나 몰아서 한다면 특정 프로세스만 CPU를 사용하게 됨
  • Issue of Fairness: 모든 작업이 CPU를 많이 사용하고자 함
  • Priority: 긴급한 작업을 먼저 수행해야 할 수도 있음
  • Context Switching: I/O가 있을 때만 yield
  • Idel time 최소화

Timesharing

  • CPU 실행 시간을 타임 슬라이스로 나눠서 실행하기
  • 원형 큐 형태: 특정 시간동안만 CPU 점유, 사용 이후 양보(relinquish)
  • 정책에 따른 스케줄링 가능: 라운드 로빈 등
  • 작업 전환에 따른 오버 헤드: 응답성과 작업 속도 간의 trade-off

Multitasking

  • Job(여러 개의 태스크 task로 구성) 여러 개가 CPU 자원을 공유하는 방법
  • Job → 여러 개의 세부 작업으로 나누어짐 (fork를 통해 자식 프로세스 생성, DBMS 멀티태스킹-자식 프로레스는 동일한 메모리를 가지기 때문에 메모리 참조 비용이 감소 등)
  • 여러 개의 프로그램이 백그라운드에서 작동
  • Context Switching + Time Sharing: 멀티프로그래밍의 I/O 필요성을 시분할을 통해 극복
  • Idle time 최소화 및 응답성을 최대화: 사용자의 상호 작용에 빠르게 응답할 수 있음
  • 복잡한 프로그램 설계 가능 → 현재 프로그램 설계 시 사용되는 기본적인 기법

Concurrent Execution

  • 세밀한 수준의 CPU 스케줄링 필요(자식 프로세스 간의 서로 다른 CPU 점유율을 조정하기 위함)
  • 타임 슬라이스 간격이 매우 작기 때문

Orderly Execution

  • 동기화 이슈
  • 데드록 발생 가능성

Memory Handling

  • 다양한 프로그램이 메모리에 적재되기 때문

3. 다양한 OS

  • Linux의 오픈 소스화
  • 개발 방법론의 변화 (Closed - Open)
  • 클라우드 컴퓨팅: 추상화된 컴퓨팅 자원을 제공하는 방법 - VM과 컨테이너

이미 가장 "핫"해진 컴퓨팅 기법 중 하나인 클라우드. 넷플릭스와 AWS, 드롭박스

  • 서버 가상화: 하이퍼바이저(VMM, HW 위의 가상의 OS) + 가상머신(서버 가상화 환경의 실행 단위, 독립적인 OS같은 역할, 게스트 OS가 동시에 동작 가능, 하이퍼바이저를 통해 장치 접근)

  • 컨테이너 가상화: 서버 가상화의 비효율성을 극복하기 위한 방법. 하나의 OS를 공유, 게스트 OS가 존재하지 않음. 컨테이너(실행 단위, 사용자 프로세스, 독립 파일 시스템 및 라이브러리, 직접적인 장치 접근 가능) + 컨테이너 엔진(호스트 OS를 활용해 컨테이너 관리, Docker 등)

→ 프로세스로 나뉘게 된다면 의존성 이슈가 생길 수 있기 때문

profile
JUST DO IT

0개의 댓글