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를 통해 알려줌
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
=> 하나의 컴퓨터에서 여러 개의 환경 구성 가능
한양대학교 강수용 교수님 운영체제 강의 내용 정리
'운영체제' 카테고리의 다른 글
[운영체제] Process synchronization (2) (0) | 2024.03.06 |
---|---|
[운영체제] Process Synchronizationtion (1) (0) | 2024.02.27 |
[운영체제] CPU Scheduling (3) | 2024.02.20 |
[운영체제] Process and Threads (2) | 2024.02.09 |
[운영체제] Computer System Overview (0) | 2024.01.22 |