CS와 Node.js 4. 프로세스 메모리 모델, 가상 메모리, Assembler 구현, 유닛 테스트

박재하·2023년 10월 19일
0

CS와 Node.js

목록 보기
4/12

각 기능에 대한 테스트

각 함수별로 테스트를 위해 중간중간에 테스트 코드를 삽입해서 확인했습니다.

함수나 기능단위의 유닛 테스트가 정말 중요하다는 것을 알게 되었습니다.

한번에 다 하고 테스트 하면 어디서 틀린지도 모르니까요!

push, pop 테스트

this.#push(123);
this.#push(456);
this.#pop();
this.#pop();

https://user-images.githubusercontent.com/138586629/253162950-6152c20f-e2ce-4756-8281-4f12c19460ae.png

malloc 테스트

this.#malloc("BOOL", 4);
this.#malloc("INT", 1);
this.#malloc("TEST", 1);

https://user-images.githubusercontent.com/138586629/253222203-cfddf9a5-b900-4548-b78b-06cb0cdee0d6.png

free 테스트

this.#free(0x0);

https://user-images.githubusercontent.com/138586629/253230926-98c86405-cd85-4971-80d4-1d95dc29a28e.png

step에서 lexer 테스트

const str = "VAR B: BOOL[4]";
const asm = new ASMParser(str);
const res = asm.analyze();
console.log(res);

const str2 = "CALL foo()";
const asm2 = new ASMParser(str2);
const res2 = asm2.analyze();
console.log(res2);

https://user-images.githubusercontent.com/138586629/253275366-0bd447da-73d2-4d49-9e70-ba69dcac8210.png

프로세스 메모리 모델, 가상 메모리 관리 방식

<운영체제> 프로세스 메모리

프로세스란 운영체제 입장에서 하나의 작업단위이며, 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 의미합니다.

가상 메모리는 다음 그림과 같이 관리됩니다.

%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2023-07-13_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_9 33 43

어떠한 값을 저장할때는 StackHeap이 주로 사용되는데, 주요 차이는 다음과 같습니다.

메모리 관리 : 스택 vs 힙

스택
프로그램이 자동으로 사용하는 영역프로그래머가 필요할 때마다 사용하는 동적인 영역
메모리에 로드될 때 스택 사이즈는 고정메모리 주소 값에 의해서만 참조되고 사용
복귀할 주소 및 데이터(지역변수, 매개변수, 리턴값 등)를 임시로 저장필요한 데이터를 동적으로 할당해서 저장할 때 사용
스택 자료구조로 LIFO(후입선출)메모리 빈 공간에 적절히 할당 및 해제됨

스택, 힙은 같은 공간을 공유하는데, 힙이 낮은 주소부터, 스택은 높은 주소부터 할당됩니다.

각 영역이 상대공간을 침범하면 Overflow가 발생한다고 하는데, 이를 각각 Stack Overflow, Heap Overflow라고 합니다.

profile
해커 출신 개발자

0개의 댓글