본문 바로가기

운영체제

[운영체제] Operating System Overview

Multiprogramming

- OS는 CPU가 불필요한 대기를 하지 않게 하기 위해서 기본적으로 멀티프로그래밍을 해야 함

- 멀티프로그래밍을 함으로써 멀티태스킹까지 가능해짐

- 하나의 애플리케이션만으로는 인터럽트 대기 등의 이유로 CPU가 바쁠 수 없음 -> 효율성을 위해 멀티프로그래밍 필요

- 여러 개의 프로그램이 모두 메모리에 올라가야 하기 때문에 가상 메모리 필요

- CPU 스케줄링 = job 스케줄링 = 프로세스 스케줄링

      ㄴ 어떤 프로그램을 지금 CPU가 실행할 지 결정해야 함

- I/O 등으로 인해 CPU가 다른 일을 해야 하면 switch 하는 기능 필요

 

Multitasking = Timesharing

- 굳이 I/O가 발생하지 않더라도 프로그램 switch 할 수도 있음 <- 모든 프로그램이 진도를 나가도록 하기 위함

- CPU 사용 시간을 여러 프로그램이 나눠 쓴다는 의미에서 Timesharing 이라고도 함

- 모든 프로그램에 대해 상호작용성 보장, interactive

- 사용자에게 멀티태스킹이 된다는 걸 알려주기 위해 모든 프로그램이 즉각 응답해줘야 됨 

- 프로그램이 메모리에 process라는 이름으로 올라감

- 프로그램 switch할 때 CPU 스케줄링 필요

- 기존 프로그램을 디스크로 내리고 방금 시작한 프로그램을 메모리로 올림 swapping 

      ㄴ 디스크에 써야 돼서 속도가 느려짐

- Virtual memory: 실행 중인 프로그램이 전체가 메모리에 올라갈 필요 없이 실행 중인 부분만 올라가도록 함

      ㄴ swapping을 효과적으로 하기 위한 방법

 

Exception/trap

- interrupt와 무관하게 sw를 중단하고 error 처리를 해야 하는 경우 exception, trap이 발생했다고 함

- 파급 효과를 막기 위해서

 

Dual-mode 

- 애플리케이션 실행 시 사용자가 짠 코드만 사용하지 않음 ex) printf같은 os 호출 함수

- 하드웨어 접근은 os가 시스템콜 호출로 관리함

- 권한 차이 때문에 사용자가 만든 코드인지 (User mode), OS 코드인지 (kernel mode) 구별해야함

- CPU는 명령어를 가져와 실행하므로 모드를 모르니까 Mode bit를 통해 알려줌

 

system call 호출 시 mode 바뀜

Process: 실행 중인 프로그램

- OS가 실행 중인 프로그램에게 process라는 자료구조로 실체를 만들어줌

- 프로그램 실행을 위해 CPU, memory, I/O, files 가 필요함

- process 안에 프로그램 실행을 위해 필요한 자원을 넣어 메모리에 올려줌

- 프로그램이 끝나면 process라는 자료구조가 삭제됨

Process Management; 프로세스 관리를 위해 OS가 하는 일

- process 생성, 삭제

- process suspend(일시 중지), CPU를 잡지 않음

- process 동기화

- process communication

- deadlock handling

 

Memory Management; 메모리 관리를 위해 OS가 하는 일

- OS는 어던 프로세스가 메모리의 어디에 올라가있고, 메모리의 어디가 비어있는지 등 관리

- 메모리 상에서 layout (어디 프로세스가 어디에 있는지) 관리

- 어떤 프로세스를 swap out 시킬 것인지, 어떤 프로세스를 메모리로 데리고 올라올 것인지

- 새로운 프로세스 시작 시 메모리 할당

- 동적 메모리 할당

 

Storage Management; 저장장치 관리

- 하드디스크의 주소 체계, 공간은 매우 복잡한 방식으로 관리됨

- 애플리케이션은 하드디스크, SSD 몰라도 됨, file이라는 공간에 데이터를 담아주면 OS가 관리

- file을 체계적으로 저장하기 위해 directories 사용

 

Mass-Storage Management

- file이라는 개체를 hard disk에 담기 위해 필요한 작업

- 어디가 비어있는지, 어디가 차 있는지

- Disk 스케줄링; I/O의 요청 순서를 조정해 head의 움직임을 최소화하는 방법

 

- 데이터가 cache에 올라가있을 수도, 메모리에 올라가있을 수도 있음

- 모든 프로그램은 항상 데이터의 최신 값을 접근해야 함

      ㄴ CPU, core가 여러 개일 때 어려워짐; cache coherency(여러 core의 cache 간 data 동기화)

      ㄴ 분산 시스템에서 더 어려워짐; 

 

I/O 장치 관련 OS의 역할

1. 다양한 하드웨어 장치들의 특성을 사용자는 구분해서 사용할 필요가 없이 만들어 주는 역할이 가장 중요

- I/O 장치는 만드는 회사가 상당히 많음

- 사용자는 block 디바이스인지 character 디바이스인지만 구분하도록 함

2. I/O 디바이스는 느리기 때문에 만회할 만한 sw적 기능 제공 

- buffering: 임시 저장 공간, 하드 디스크에 써야 하는 정보를 버퍼에 써놨다가 나중에 쓰는 것

- spooling: 어떤 작업이 생성해 낸 결과를 다른 작업한테 보낼 때 직접 보내지 않고 중간 단계의 임시 공간(spool)에 보내는 것

- caching: 하드 디스크에 접근해야 되는 데이터의 일부를 올려 놓아 하드 디스크 접근 횟수를 줄여 속도를 올림

 

Protection/Security와 관련된 OS의 역할

Protection: 권한이 없는 자가 자원에 접근하려고 할 때 막아주는 매커니즘

       - 그러기 위해 모든 user에게 ID를 주고 권한 부여, 모든 files과 연관되어 접근 관리

       - 여러 사용자를 묶은 Group ID 설정으로 권한 부여도 가능

       - Privilege escalation: 프로그램 수행 시 반드시 없는 권한을 획득해야 하는 경우가 있음(ex> spooling) => 잠깐 권한을 줘

 

OS는 사용자의 요청 (system call) 에 따라 "service" 해주는 것

Service 종류

- User Interface

- 프로그램 실행

- I/O Operations

- File-system 관리: 파일 및 디렉토리 생성, 삭제 등

- Communications: 다른 process한테 이 데이터를 보내줘, network를 통해 이 데이터를 보내줘

- Error detection: Error detect, detect 시 처리하는 서비스

- 자원 할당: memory, CPU 등

- accounting: 어떤 user가 어떤 자원을 얼마나 많은 사용했나

- Protection and security

 

System Calls

  • Application이 system calls를 통해 operating system tkdyd
  • Library 또는 GUI 사용해서 호출
  • Application Program Interface(API): 시스템콜을 직접 호출하는 대신 high-level 인터페이스를 호출하도록 함

       ex) printf하려면 wirte라는 system call 호출해야 하는데 이는 단순해서 조합해서 사용해야 함

             => 그래서 printf 라는 한줄로 해결하게 함 

       - OS마다 시스템콜의 이름, 사용법이 다른데 API 호출로 OS에 특화되어 사용되게 할 수 있다는 장점

       - 언어별로 제공하는 API의 이식성(portability)가 가장 좋음, 그 다음 OS별 API

  • 구현

system call마다 번호 부여받음, table 이 있고 번호로 가면 system call의 주소가 있음 -> 해당 주소로 program counter 셋팅해서 JUMP -> 프로그램 시작 시 system call 실행 됨

 

Virtual Machine

=> 하나의 컴퓨터에서 여러 개의 환경 구성 가능

 

한양대학교 강수용 교수님 운영체제 강의 내용 정리