티스토리 뷰

주소공간

컴퓨터 프로그램의 내부구조는 함수들로 구성된다. 프로그램이 CPU에서 명령을 수행하려면 해당 명령이 있는 주소영역이 메모리에 올라가 있어야 한다. 프로그램의 주소영역은 코드, 데이터, 스택 영역으로 구분된다.

- 코드 : 작성한 함수의 코드가 CPU에서 수행가능한 기계어 명령어 형태로 변환되어 저장되는 부분
- 데이터 : 전역 변수 등 프로그램이 사용하는 데이터를 저장하는 부분
- 스택 : 함수가 호출될 때 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장하는데 사용

PC (Program Counter)

CPU가 수행해야 할 메모리 주소를 담고있는 주소이다.CPU는 PC가 가리키는 메모리 위치의 명령을 처리하게 된다.

프로그램의 실행

프로그램의 실행되고 있다의 의미는

1. 디스크에 존재하던 실행파일이 메모리에 적재된다.
2. 프로그램이 CPU를 할당받고 명령을 수행하는 상태이다.

프로세스(실행되고 있는 프로그램)의 주소공간 중 당장 필요한 부분만 메모리에 올라와 있고 나머지는 디스크의 스왑 영역에 내려놓는 방식으로 운영된다. 각 프로그램마다 주소공간을 독자적으로 가지며 이것을 가상메모리(virtual memory), 논리적 메모리(logical memory)라고 한다. 가상메모리 기법을 사용하여 물리메모리의 제약에서 벗어난 프로그래밍이 가능해졌다.

 

커널(운영체제)의 주소공간

커널도 프로그램이므로 주소공간을 가진다. 코드에는 인터럽트 처리코드, 자원관리를 위한 코드등이 존재한다. 데이터 영역에는 각 프로세스의 상태(PCB), CPU 사용정보, 메모리 사용정보가 존재한다. 스택영역에는 각 프로세스마다 별도의 스택이 존재한다.

운영체제 주소공간

프로세스의 실행상태

프로세스가 수행되는 동안 프로세스 자신의 주소공간에 있는 코드 뿐만 아니라 커널의 주소공간에 있는 코드도 실행된다. 사용자 정의 함수나 라이브러리 함수로 자신의 주소공간의 코드도 살행하지만 입출력 시스템 콜 등을 통해 운영체제의 함수도 호출하여 실행하기 때문이다.

 

사용자모드(A의 주소공간) -> 커널모드(커널 주소공간) -> 사용자모드(A) -> 커널모드 -> 사용자모드(A)

 

위와 같이 사용자모드와 커널모드를 넘나들며 CPU 제어권을 넘겨받으며 실행되지만 커널이 시스템 A를 위한 일을 해주고 있다. 따라서 커널모드에서도 커널이 실행상태(running state)에 있다고 하지 않고, 프로세스 A의 실행상태에 있다고 한다. 다만 상태 구분을 위해 여기서의 커널모드는 "프로세스 A가 커널모드에서 실행중" 이라고 한다.

 

정리

프로그램은 코드, 데이터, 스택의 주소공간을 가진다. 메모리에 주소공간이 올라와 있어야 CPU가 데이터를 읽고 수행이 가능하다. 메모리의 영역은 제한적이기 때문에 디스크에 데이터를 분산하여 저장한다. 가상메모리 기법으로 물리메모리 크기의 제약에서 벗어난 프로그래밍이 가능해졌다.

 

운영체제 시리즈는 반효경 교수님의 운영체제 강의 와 "운영체제와 정보기술의 원리"라는 책을 바탕으로 정리한 내용입니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함