프로세스와 메모리 구조
설명 영상 프로세스와 메모리 구조 · 2:55
핵심 정리
프로세스는 실행 중인 프로그램이다. 하드 디스크 등에 저장된 실행 코드를 프로그램이라고 한다면, 프로세스는 프로그램과 그 실행 상태가 메모리에 올라가 작동하는 작업 단위이다. 따라서 하나의 프로그램을 여러 번 실행하면 메모리에서 여러 프로세스가 작동한다.
운영 체제는 메모리 보호와 가상 메모리를 통해 프로세스의 메모리 사용을 통제한다. 메모리 보호는 프로세스가 자신에게 할당되지 않은 메모리를 읽거나 쓰지 못하게 막는다. 이를 통해 한 프로세스의 버그나 악성 코드가 다른 프로세스의 동작에 영향을 미치는 것을 막는다. 가상 메모리 시스템에서 애플리케이션은 가상 주소로 메모리에 접근하고, 시스템은 그 주소를 실제 물리 주소로 변환한다. CPU가 실행하는 머신 코드는 메모리의 텍스트(코드) 세그먼트에 있다.
문맥 교환은 CPU가 한 프로세스에서 다른 프로세스로 넘어갈 때 이전 프로세스의 상태를 저장하고 새 프로세스의 상태를 적재하는 작업이다. 문맥 교환에서는 상태 저장 후 새 상태 적재의 순서를 기억해야 한다. 이 작업은 프로세스가 CPU를 넘겨받는 과정에서 일어나며, 메모리 영역을 바꾸는 작업과는 다르다.
스래싱은 지역 페이지 교체 알고리즘으로 제한할 수 있으며, 이를 막으려면 각 프로세스에 최소 프레임 개수를 보장해야 한다. 메모리 관리 시스템은 접근 속도가 다른 주 저장 장치와 보조 저장 장치 사이의 정보 이동을 처리한다. 이 과정이 원활해야 프로세스가 안정적으로 실행된다.
자세히
함수 호출과 스택
스택 영역은 함수 호출에 필요한 지역 변수, 매개변수, 반환 주소 등을 저장한다. 함수가 호출될 때 이 영역이 할당되고, 호출이 끝나면 소멸한다. 코드 세그먼트에는 머신 코드가 놓이고 스택 영역은 함수 호출 때마다 생기고 사라지므로 두 영역의 용도와 수명은 서로 다르다.
x86 함수 호출 시 반환 주소가 스택에 쌓인다. 피호출 함수는 이전 프레임 포인터(ebp)를 저장한 뒤 ebp를 기준으로 지역 변수와 인자에 접근한다. ebp 저장 후 ebp 기준 접근의 흐름으로 기억하면 선지를 구별하기 쉽다.
x86 스택 프레임에서 파라미터와 지역 변수는 EBP를 기준으로 오프셋을 두어 접근한다. 기준 레지스터가 EBP로 같으므로, 앞의 함수 호출 설명과 이어서 이해해야 한다.
함수가 반환될 때는 스택 포인터를 프레임 포인터로 복원한다. 이어서 이전 프레임 포인터와 복귀 주소를 차례로 pop한 뒤 호출 다음 명령을 실행한다. 이 복원 순서를 뒤바꾸면 반환 과정에 관한 선지의 참과 거짓을 가리기 어렵다.
프로세스 상태와 관리 정보
프로세스의 상태에는 준비, 실행, 종료 등이 있다. 상태의 이름만 외우지 말고, 상태가 어떤 순서로 바뀌는지도 함께 정리해야 한다.
이어지는 내용
- 레지스터의 역할
- 포그라운드와 백그라운드
- 자주 헷갈리는 것
- 기출에서는
로그인하면 하루 5페이지까지 무료로 전체를 읽을 수 있습니다.
앱에서 이 절 읽기