- CPU 클록: 초당 클록 사이클 수
- CPU instruction cycles: 한 개 명령어 처리 주기
프로세스
추상화
- 추상화: OS는 HW 자원 → 논리적 자원으로 추상화 + 리소스 사용 인터페이스 제공
- 어플리케이션 사용성(Usability)
- OS 자체에 대한 관리(Manageability)
HAL
- Hardware Abstraction Layer: HW를 사용하기 위한 추상화 단계의 레이어
- HW의 구체적 특징을 "숨기고" 일관적인 추상화 HW로 윗 계층에 제공
- E.g.) 디바이스 드라이버: 추상화 HW에 맞춰 실제 장치와의 인터페이스 제공
CPU의 추상화
- ISA(Instructin Set Architecutre): CPU 구분 기준
- 프로그램은 ISA에서 수행하는 바이너리 코드의 집합
- 동일한 ISA → 동일한 CPU
- (1). 연산: 주어진 명령을 순차적으로 처리
- (2). 컨트롤: 인터럽트 이벤트 발생 시 ISR 호출
프로그램과 프로세스
- 소스코드 → 컴파일러 → 오브젝트 파일 → 링커 → 실행 가능한 파일
- 소스코드(.c file): 프로그램의 수행 작업을 프로그래밍 언어로 표현
- 컴파일러: 사람의 언어인 소스 코드 → CPU가 이해 가능한 기계어로 쓰인 오브젝트 파일로 변경
- 오브젝트 파일(.o file): 기계어로 구성 → 상대적 주소로 표현되어야 함(링커)
- 링커(Linkage editor): 오브젝트 + 라이브러리 → 실행 파일
- 실행 파일(.exe): OS에서 수행 가능한 파일 → 헤더, 텍스트, 데이터, 절대적 주소로 표현되어야 함
- 컴파일러 + 링커는 OS, CPU에 따라서 서로 다른 형태의 파일 생성
프로세스의 개념
- 프로세스: 실행 상태의 프로그램
- CPU HW 자원을 서로 다른 프로그램이 사용하기 위해 만들어진 추상화 개념
- 서로 다른 프로세스 간의 도메인(protection domain) 존재
- 컨텍스트: 프로그램의 시작-끝까지 이루어지는 흐름, line by line + branch
- 리소스: 프로세스 별 할당 자원(메모리 - 가상 주소 공간/텍스트, 데이터, 힙, 스택 등)
스레드
- 프로세스 내 실행 유닛: OS가 컨텍스트를 관리하는 구체적인 실체
- 레지스터 및 스택, PC의 집합: 프로세스 내에서 스레드는 코드, 데이터, 오픈 파일을 공유함
프로세스와 스레드 비교
- 이전 프로세스 컨셉 = 스레드: 하나의 프로세스 내 단일 실행 유닛만 존재
- 구 프로세스 컨셉 = 싱글 스레드 + 주소 공간
- 현 프로세스 컨셉 = 멀티 스레드가 존재하는 곳, 스레드는 프로세스의 자원을 공유
메모리
- 코드: 프로그램 코드, 머신 인스트럭션, 정적
- 데이터: 전역 변수 및 데이터, 정적
- 힙: 메모리 공간, 동적으로 할당됨 - malloc()
- 스택: 일시적 데이터, 함수 파라미터, 리턴 어드레스, 로컬 변수, 동적
메모리 크기
- 프로세스 단위 메모리 크기: 32비트 기준 4GB
- 정적(코드, 데이터): 프로그램 이미지의 헤더 파일에서 컴파일 시 크기 결정
- 힙: 동적 메모리 할당/해제 시
- 스택: 시스템에 따른 최대 크기 제한 가능
- Jab: 배치 시스템
- Program: 실행되기 이전의 프로그램 이미지
- Task: Job과 유사한 개념. CPU에서의 Task는 하나의 실행 흐름
- Thread: 프로세스 내 실행 유닛
- Processor: CPU