들어가기 전, 기본 내용 정리!
CPU와 메모리의 상호작용
그 외 주요 내용
-
캐쉬 : 좀 더 작고 빠른 메모리가 크고 느린 메모리의 임시 저장소
-
레지스터 : CPU의 연산 장치에 직접적으로 값을 전달. 실제 계산용 데이터 저장소.
- 인터럽트 발생 시 처리 과정
- 원래 응용프로그램 프로세스가 수생되고 있다가 인터럽트 발생시 해당 프로그램 실행 중단
- 인터럽트를 처리하기 위한 운영체제 코드 수행 (=운영체제가 CPU를 획득) by 인터럽트 핸들러-> 아래그림 참고
- 인터럽트 루틴이 완료되면 다시 처음에 수행하던 프로세스가 수행
Operating System의 구조
- 시분할
- 다중프로그래밍 (여러개의 프로세스가 동시에 Main Memory 공유) -> 메인 메모리에는 여러개의 프로세스가 적재
-
빈번한 작업 교체 (CPU Switching)
-
CPU 스케줄링: 어떤 프로세스가 CPU에 할당될 것인가?
-
Swapping : 프로세스가 요구하는 메모리가 부족할 때 일부 프로세스를 디스크에 저장
- 가상 메모리 : 수행 중인 프로세스가 완전히 주 메모리에 없어도 된다!
프로세스의 구조
-
Stack : 일반 Function, 지역번수
-
heap : malloc(동적 메모리 할당)
-
data : 전역 변수
- 여러개의 프로세스가 메모리에 적재되면 다음과 같은 그림으로 나타낼 수 있다.
프로세스의 상태
-
-
Ready : 실행 가능한 상태에서 CPU의 호출을 기다린다 (CPU는 PC가 가리키는 명령을 메모리에서 읽어온다)
-
Running : 실행 중
-
Waiting : 프로세스가 이벤트 발생을 기다니리는 중(얘는 나중에 Ready Queue로 가야 Running 상태가 될 수 있다!)
프로세스 간 통신의 방법
-
-
(a) Message Passing : 서로 다른 컴퓨터의 통신에 유용, 속도 느림
-
(b) Shared Memory : 속도, 편의성에서 우수 but 동기화 필요, 프로세서 수가 증가할 경 우 성능 저하 (캐시 일관 성 문제 등 발생)
-
RPC 등
쓰레드
-
프로세스 내에서 코드, 데이터, 운영체제 자원(파일) 등을 공유
-
프로세스 동기화
-
Critical Section (임계구역) : 프로세스들끼리 공유하는 데이터를 접근하는 부분
-
Critical Section 문제
-
Mutual Exclusion(상호배제) : 동시에 두 프로세스가 임계구역에 있을 수 없다
-
Progress(진행) : 임계구역에 있는 프로세서가 없다면, 임계구역에 들어가기를 원하는 프로세스들 중의 하나가 반드시 진입이 허용되어야 한다
-
Bounded Waiting(한정된 대기) : 임의의 한 프로세스가 진입 요청 후 진입이 허용 될 때까지 다른 프로세스들의 임계구역 진입이 허용되는 횟수에 상한이 있어야 한다.
Mutex Locks
-
Critical Section 문제를 운영체제에서 해결한다!
-
acquire(), release()를 통해 대기 지원
-
Busy Waiting을 요구
- Mutex Lock의 정의
메모리 관리 전략
- 세그먼테이션 : 프로세스 메모리를 사용자 관점에서 분할한 가변적 단위 ex) 메인 프로그램, 심볼 테이블, 지역변수…
-
- 페이징 : 논리적인 프로세스 공간을 페이지라는 단위로 나누어서 물리적인 공간의 프레임에 적재 (CPU가 페이지를 참조해서 프로세스의 데이터를 가져온다!!)
가상 메모리
-
실제 메모리의 크기에 관계 없이 프로그램이 가상의 큰 메모리 공간 사용 (요구 페이징 형태의 가상 메모리)
-
Memory-mapped file : 디스크 블록을 메모리의 한 페이지로 사상시킨다 (File I/O를 일반 메모리 접근으로 대신 처리)