반응형
C언어의 꽃, 포인터
"포인터가 없으면 불편한 지경에 이르렀다면, 당신은 C를 할 줄 안다고 할 수 있다."라는 말은 C 언어의 핵심인 포인터(pointer)의 중요성을 강조한 것이다. 포인터는 C 언어에서 강력한 도구로, 메모리 관리와 직접적인 데이터 접근을 가능하게 한다. 하지만 그로 인해 발생하는 매우 치명적인 문제가 있는데....!?
컴퓨터와 VMS 이해
C 언어와 포인터를 제대로 이해하려면 컴퓨터 구조와 가상 메모리 시스템(VMS, Virtual Memory System)에 대한 기본적인 이해가 필요하다.
VMS란 무엇인가?
VMS는 컴퓨터 시스템에서 논리적으로 완벽한 선형 메모리를 제공한다. 이를 통해 응용 프로그램은 4GB 크기의 선형 메모리 공간(32비트 기준)을 사용하는 것처럼 보인다. 이는 42억 개의 char 데이터를 다룰 수 있는 크기이다.
VMS의 주요 특징:
- 논리 주소와 물리 주소 분리:
가상 주소를 실제 물리 메모리에 매핑한다. - 구성 요소:
- Stack: 함수 호출 시 사용되는 메모리이다.
- Heap: 동적 메모리 할당 영역이다.
- Code 영역: 실행 코드가 저장된다.
- Data 영역: 전역 변수와 정적 변수가 저장된다.
- 페이징 기법(Paging):
가상 메모리를 작은 고정 크기인 페이지(page)로 나눈다.
페이지 테이블(Page Table)을 통해 가상 주소를 물리 주소로 변환한다.
가상 주소와 물리 주소 변환
1. 가상 주소 구조
가상 주소는 두 부분으로 나뉜다:
- P(Page): 페이지 번호이다.
- D(Offset): 페이지 내 오프셋이다.
2. 페이지 변환 과정
- 가상 주소(P, D)를 페이지 테이블을 사용해 물리 주소로 변환한다.
- 페이지 테이블에서 P를 검색해 페이지를 프레임(Frame)으로 매핑한다.
- 최종적으로 변환된 주소는 물리 주소(F, D)가 된다.
코테를 풀다가, 혹은 개발하다가 에러가 난 이유
1. Segmentation Fault:
잘못된 포인터 연산이나 배열 접근 시 발생한다.(즉, 내가 선언했던 변수의 범위를 벗어났다.)
유효하지 않은 가상 메모리 주소에 접근할 경우 발생한다. (페이지 테이블을 찾아갔더니, invaild한 주소를 알려줬다.)
2. Page Fault:
프로그램이 필요한 페이지가 메모리에 로드되지 않은 경우 발생한다.
페이지를 디스크에서 메모리로 불러오며 처리된다.
반응형
'SW개발 > 면접을 위한 CS 전공지식 노트' 카테고리의 다른 글
4.2 ERD와 정규화 과정 (1) | 2025.01.21 |
---|---|
4.1 데이터베이스의 기본 (0) | 2025.01.21 |
3.4 CPU 스케줄링 알고리즘 (1) | 2025.01.15 |
3.3 프로세스와 스레드 (0) | 2025.01.15 |
3.2 메모리 (0) | 2025.01.15 |