C01 운영체제 개요01 운영체제의 개념02 컴퓨터의 발전 과정03 운영체제의 구성커널 구조04 운영체제의 종류C02 컴퓨터의 구조와 성능 향상01 컴퓨터의 기본 구성02 CPU와 메모리03 컴퓨터 성능 향상 기술C03 프로세스01 프로세스의 개념과 상태02 프로세스 제어 블록과 문맥 교환03 프로세스 계층 구조04 프로세스의 데이터 영역C04 스레드와 프로세스 간 통신01 스레드의 개념과 특징02 스레딩03 프로세스 간 통신04 프로세스 간 통신 코드C05 CPU 스케쥴링01 CPU 스케쥴링의 개요02 CPU 스케쥴링 알고리즘03 멀티프로세서 스케쥴링
C01 운영체제 개요
01 운영체제의 개념
- 운영체제의 역할과 목표
- 자원 관리 → 효율성
- 자원 보호 → 안정성
- SW 인터페이스 제공 → 편리성
- HW 인터페이스 제공 → 확장성
02 컴퓨터의 발전 과정
03 운영체제의 구성
- 사용자 인터페이스
- 커널: 프로세스 관리, 메모리 관리, 저장장치 관리, 입출력 관리
- 커널은 공식적인 요청을 거쳐야만 자원을 사용할 수 있게 제한함 → 그것이 시스템 호출
- 즉 직접 app이 자원에 직접 접근하는게 아닌 시스템 함수를 통해 접근
- 이중 모드 연산
- 파일 저장이나 네트워크 데이터 전송등 자원에 접근하는 작업은 시스템 호출이 되면 → 커널 모드로 전환고 → 실행된다
- 디바이스 드라이버
- 마우스, 키보드등 주변 장치를 관리
- 디바이스 드라이버는 커널과 HW사이의 인터페이스다
커널 구조
- 단일형 구조
- 계층형 구조
- 마이크로 구조
이후 정리 p48
04 운영체제의 종류
- 유닉스 계열 운영체제
- 개인용 컴퓨터 운영체제
- 모바일 운영체제
C02 컴퓨터의 구조와 성능 향상
01 컴퓨터의 기본 구성
02 CPU와 메모리
- 버스의 구조
- 제어 버스
- 주소 버스
- 데이터 버스
- 메모리의 종류
- 저장장치 계층구조
- 레지스터 1ns - 바이트
- 캐시 2ns - 메가바이트
- 메인 메모리 20ns - 기가 바이트
- 보조 저장장치 100ns - 테라바이트
03 컴퓨터 성능 향상 기술
- 버퍼
- 스풀(SPOOL - Stimultaneous Peripheral Operation On-Line)
- CPU와 입출력 장치가 독립적으로 동작하도록 돕는다
- 예시) 프린터 출력에 사용도는 스풀러
- 캐시
- 인터럽트와 DMA
- 입출력 관리자와 인터럽트
- 인터럽트 방식의 입출력 과정
- 인터럽트 번호(IRQ)
- 인터럽트 벡터
- 직접 메모리 접근과 메모리 맵 입출력
- DMA(직접 메모리 접근)
- 메모리 맵 입출력(MNIO)
- 멀티프로세싱
- 멀티프로세서 시스템: 2개 이상의 CPU를 장착하는 시스템
- 멀티코어 시스템
- 명령어 병렬처리
- 하나의 코어에서 여러 개의 명령어를 동시에 실행하는 방법
- 인텔 CPU에서는 하이퍼 스레딩이라고 부른다
키워드 SIMD
명령어 하나에 데이터가 여러개들어갈 수 있는데
여기서 어떻게든 다중 명령을 수행하기 위해 2개로 늘여서 처리한건데, 이걸 더 늘이려면 simd 한계 때문에 처리가 안된다
- 버퍼의 문제와 해결 방안
- 버퍼 오버플로우와 scanf() → scanf_s()
- 키보드 버퍼와 scanf()
- 모니터 버퍼
- 하드웨어 안전 제거와 플러시
- 키보드 버퍼의 보안
C03 프로세스
01 프로세스의 개념과 상태
02 프로세스 제어 블록과 문맥 교환
- 프로세스 제어 블록(PCB)
- 문맥 교환(context switching)
- 타임 슬라이스의 크기: 10~200ms
03 프로세스 계층 구조
- 프로세스 계층구조의 필요성
- 가비지 컬렉션
- init과 systemd
service → init
systemctl → systemd
- 프로세스 생성 시스템 호출
- 자식 프로세스를 생성하는 fork()
- 프로세스 재사용 시스템 호출
- 프로세스를 재사용하는 exec()
- PCB는 유지되며 코드영역만 새로운 코드로 완전히 교체
- 데이터 영역은 리셋됨
- 유닉스 셸에서 fork()와 exec()을 함께 사용하기
- 프로세스 동기화
- 부모가 자식 프로세스를 기다리게 하는 wait()
04 프로세스의 데이터 영역
- 데이터 영역
- 코드 영역
- 정적 데이터 영역
- 힙 영역
- ~
- 스택 영역
- 프로세스의 가변적 영역
- 스택
C04 스레드와 프로세스 간 통신
01 스레드의 개념과 특징
- 스레드의 개념
- 멀티태스킹과 멀티스레딩
- 멀티 태스킹: 프로세스간 각자의 작업을 수행, 프로세스 간 통신(IPC) 사용, 독립적인 메모리 공간
- 멀티스레딩: 하나의 프로세스 내에서 여러 개의 스레드가 동시에 작업하는 방식
- 멀티스레드의 장단점
- 장점
- 자원 공유: 코드, 전역 데이터, 파일이 공유됨
- 문맥 교환이 효율적: 문맥 교환시 변경할 정보가 상대적으로 적음
- 응답속도 향상: 입출력 스레드만 대기 상태가 되고 나머지는 계속 실행
- 적응성 향상: 멀티코어 환경 최적화
- 단점
- 모든 스레드가 프로세스와 운영을 함께한다: 예) 웹브라우저에서 한 탭이 오류면 전체가 종료
02 스레딩
- 멀티스레딩 모델
- 1 to N 모델: 사용자 스레딩
- 장점: 낮은 문맥 교환 비용 - 커널의 개입 없이 스레드를 전환해서
- 단점: 입출력 대기 비효율 - 커널 스레드가 입출력을 위해 멈추면 모든 사용자 스레드가 멈춤
- 단점: 멀티코어 활용 불가능
- 단점: 보안 취약
- 1 to 1 모델: 커널 스레딩
- 단점: 높은 문맥 교환 비용 - 커널이 직접 스레드를 관리해 문맥 교환시 오버헤드 발생
- 장점: 입출력 대기 효율
- 장점: 멀티코어 활용 가능
- 장점: 안정성
- M to N 모델: 멀티레벨 스레딩
- 장점: 입출력 대기 유연성 - 하나의 커널 스레드가 대기일 때 다른 커널 스레드가 대신 작업
- 장점: 멀티코어 활용 가능
- 단점: 높은 문맥 교환 비용
- 단점: 스케쥴링 및 동기화가 복잡함
- 스레드 코드
- 유닉스에서 스레드 만들기
- 자바에서 스레드 만들기
- 자바는 별도의 라이브러리 없이 자체적으로 스레드를 지원한다 → Thread 클래스
- 자바에서 스레드 동기화하기
- try - catch와 스레드를 기다리는 .join()을 사용
03 프로세스 간 통신
- 프로세스 간 통신의 개념
- 프로세스 간 통신 기법의 종류
- 공유 메모리 밑 공유 파일
- 원시적인 프로세스 간 통신 방법
- 파이프 통신
- 동일 컴퓨터에서 통신의 사용
- 소켓 통신
- 다른 컴퓨터간 통신에 사용
- 데이터 전달 방향에 따른 통신 분류
- 단방향 통신
- 양방향 통신
- 반양방향 통신 - 동시에 송수신을 불가능 ex) 무전기
- 동기화 통신과 비동기화 통신
- 비동기화 통신 - 데이터가 언제 도착할지 모름
- 논 블로킹 방식 통신, while등으로 계속 도착할 때 까지 기다리기 → busy waiting
- 동기화 통신
- 데이터가 도착할 떄까지 OS가 알아서 대기해줌 → non busy waiting
- 프로세스 간 통신 기법
- 프로세스의 파일 접근
- 파이프 통신
- OS가 동기화 처리를 해줘 부모 프로세스는 바쁜 대기를 하지 않아도 됨
- 네트워크 통신 이해하기
- TCP/IP
- 소켓 통신
04 프로세스 간 통신 코드
- 파일 입출력
- 파일 포인터
- fork()와 파일 기술자
- fork()시 fd가 공유되어 부모/자식 프로세스가 같은 파일을 읽고 쓸 수 있다
- 파일 접근에는 파이프 통신과 달리 동기화 기능이 없다
- 파이프 코드를 통한 부모-자식 프로세스 간 통신
- 파이프는 단방향 통신을 제공
- 소켓 코드를 통한 네트워크 기반 통신
- 소켓 코드의 구조
- 클라이언트 코드 분석
- 서버 코드 분석
C05 CPU 스케쥴링
01 CPU 스케쥴링의 개요
- CPU 스케쥴링
- 단계별 스케쥴링
- 고수준: 전체 프로세스의 개수를 결정하는 단계
- long-term 스케쥴링 또는 job 스케쥴링이라고 함
- 중수준: 프로세스 수를 조절하여 시스템 과부하를 방지하는 단계
- 저수준: 활성화된 프로세스가 실제로 실행되는 단계
- CPU 스케쥴링에서 대부분의 작업이 저수준 스케쥴링이다
- 선점형 스케쥴링과 비선점형 스케쥴링
- 선점형 스케쥴링
- 시분할 시스템과 인터럽트
- 컨텍스트 스위칭으로 낭비가 생기는 단점
- 그러나 빠른 응답 시간을 요구하는 대화형 시스템이나 시분할 시스템에 적합
- 비선점형 스케쥴링
- 옛날 배치 작업에서 주로 사용했다
- 선점형 스케쥴링에서도 시스템 백업 프로세스는 비선점형 방식으로 처리된다
- CPU 스케쥴링의 목표
- 우선순위와 CPU 스케쥴링
- 우선순위의 개념과 필요성
- 우선순위의 주요 결정 기준
- CPU-bound 프로세스와 I/O-bound 프로세스
- I/O-bound 프로세스의 우선순위를 높게
- 전면 프로세스와 후면 프로세스
- 고정 우선순위와 변동 우선순위
- 준비 큐와 대기 큐
- 준비 상태에서 우선순위별 준비 큐가 있다
- 대기 상태에서도 입출력 장치마다 대기 큐가 존재
02 CPU 스케쥴링 알고리즘
- CPU 스케쥴링 알고리즘 종류와 평가
- CPU 스케쥴링 알고리즘 종류
- 비선점형
- FCFS(선입선출), SJF(최단 작업 우선), HRN(최고 응답 우선)
- 선점형
- RR, SRT(최소 잔여 시간)
- 고정형 우선순위 선점형 스케쥴링 알고리즘 - MLQ(다단계 큐)
- 이걸 개선한게 다단계 피드백 큐(MLFQ)
- CPU 스케쥴링 알고리즘의 평가 기준
- CPU 사용률
- 처리량
- 대기 시간
- 응답 시간
- 반환 시간
- 선입선출(FCFS) 스케쥴링
- 최단 작업 우선(SJF) 스케쥴링
- 최고 응답 우선(HRN) 스케쥴링
- 대기시간과 실행시간을 모두 고려하여 우선순위를 결정
- 라운드 로빈(RR) 스케쥴링
- 최소 잔여 시간(SRT) 스케쥴링
- 우선순위를 고려한 스케쥴링
- 다단계 큐(MLQ) 스케쥴링
- 각 단계는 라우드로빈 방식으로 운영된다
- 우선순위가 낮을수록 타임 슬라이스 크기가 커진다
- 다단계 피드백 큐(MLFQ) 스케쥴링
- 프로세스의 우선순위가 동적으로 변하는 변동 우선순위 방식
- CPU를 사용하면 우선순위가 한 단계씩 낮아진다
- 오래 대기하면 우선순위가 상대적으로 높아진다
우선순위가 다시 높아지지는 않는지?
03 멀티프로세서 스케쥴링
- 멀티프로세서 스케쥴링의 고려 사항
- 비대칭형 스케쥴링과 대팅형 스케쥴링
- 비대칭형 스케쥴링: 하나의 프로세서가 스케쥴링 역할, 단순한 시스템에서 사용
- 대칭형 스케쥴링: 모든 프로세서가 독립적으로 스케쥴링을 수행
- CPU 선호도: 동일한 프로세스에 속한 스레드를 계속 같은 코어에서 실행시킴
- CPU 선호도(affinity), 프로세스 선호ㅗㄷ, 코어 선호도, 캐시 선호도라고 부름
- 단일 큐 멀티프로세서 스케쥴링(SQMS)
- 모든 스레드를 하나의 큐에 넣어 스케쥴링 하기
- CPU 선호도 구현이 어려움
- 다중 큐 멀티프로세서 스케쥴링(MQMS)
- 부하 불균형이 발생할 수 있음
- 그래서 작업 훔치기(작업이 없는 큐에서 작업을 가져오기)를 사용 → CPU 선호도가 해쳐짐