hyper-v라는 내용을 동기 형에게 설명을 듣는 데 리눅스와 윈도우를 hyper-v가 동시에 실행시켜 준다는 이야기를 들었다. 동시에 실행시켜준다? 그러면 병렬 작업이라는 소리인데 '한 쪽은 윈도우를 한 쪽은 리눅스를 어떻게 동작시키지?' 라는 생각이 들었음.
✅ 하나의 시스템에 Hyper-V는 1개만 설치되며, 그 안에서 여러 VM을 생성할 수 있음
Hyper-V는 가상 CPU 단위로 스케줄링을 통해서 윈도우와 리눅스를 번갈아 실행시켜줌. 따라서 같은 물리 코어를 윈도우와 VM이 시간 단위로 번갈아 쓰는 구조이다.
1 << 31을 덮어쓰면 어떻게 될까?DOS라는 현대와는 다른 메모리 보호가 없는 운영체제가 있다고 한다. 이 이야기를 왜 하냐면 C언어에 scanf와 printf라고 입력과 출력을 담당하는 기능이 있는데 a라는 10개의 int형 배열을 만들었을 때 이 배열에 1 << 31의 값을 할당하게 되면 메모리에 2^31만큼의 값들이 저장되고, printf를 출력하면 0~9까지만 출력이 된다고 한다. 즉 우리 눈에는 배열이 10개만 만들어진 것처럼 보이지만 실제는 2^31개나 만들어진 것이다(왜 2^31개이냐면 1 << 31은 비트 연산자로 1을 31만큼 왼쪽으로 밀고 남은 자리를 0으로 채우기 때문이다). 이 값을 메모리에 저장하게 되면 기존에 메모리에 저장되어 있던 값들은 어떻게 될까? 그리고 메모리 영역을 넘어서서 최상위에 있는 커널 영역까지 영향을 준다고 하는 데 왜 이런 일이 벌어질까?
int* ptr = (int*)0x12345678; *ptr = 1234;처럼 임의 주소를 접근해도 시스템이 막지 않습니다.1 << 31 같은 큰 연산으로 메모리를 덮어써도 OS가 예외를 발생시키지 않고, 실수로 커널이나 BIOS 영역을 망가뜨릴 수도 있습니다.✅ 현대 운영체제는 이런 위험한 접근을 방지하기 위해 메모리 보호를 적용합니다.
프로세스에 p1, p2, p3라는 영역이 있다고 한다
p1, p2, p3은 각각 실행 중인 독립된 프로세스를 의미하며, 각자 고유한 주소 공간, PID, 레지스터 상태 등을 가집니다.✅ OS는 여러 프로세스를 동시에 스케줄링하며 CPU 시간을 나눠줌
malloc()이 할당한 메모리는 어디에 저장되는가?malloc()은 힙(Heap) 영역에 메모리를 할당합니다.✅ 힙은 수백 MB ~ 수십 GB까지 할당 가능하며, 할당 해제는
free()로 수동으로 해야 함
malloc()으로 확보한 메모리도 컴퓨터를 껐다 켜면 초기화됩니다.✅ 데이터를 영구 저장하려면 파일 I/O, 데이터베이스, EEPROM 등을 사용해야 함
typedef struct {
int id;
char name[100];
} Student;
Student* s = malloc(sizeof(Student));
malloc()으로 유동적으로 메모리를 관리해야 합니다.❗ 꼭 같이 써야 하는 건 아니지만, 동적 자료구조나 복잡한 데이터 흐름이 있을 때는 필수에 가깝습니다.
Student s;
s.id = 1;
malloc()은 RAM의 Heap 영역에서 동적으로 메모리를 할당해줍니다.struct는 복잡한 데이터를 표현할 수 있는 구조이며, 둘을 조합하면 강력한 메모리 제어가 가능합니다.malloc + struct는 C의 진짜 무기다. 강력하지만 위험하니 구조화된 메모리 관리 습관이 필수!