///////
Search
5️⃣

심화문제 1 ~ 3

1. 컴파일러와 인터프리터를 비교하여 설명하시오.

공통점
고급 언어로 작성한 소스코드를 기계어로 번역하는 언어 번역 프로그램
컴파일러 : 소스코드를 기계어로 번역 후 한꺼번에 실행(C, Java)
목적
오류 발견 : symbol table 사용한 오류 발견으로 실행 시 문제가 없도록 함
symbol table : 변수 선언부에 명시한 각 변수의 이름과 종류를 모아놓은 테이블
코드 최적화 : 군더더기와 사용하지 않는 변수를 삭제하여 실행 속도 개선
인터프리터 : 소스코드를 한 행씩 번역하여 실행(JS, 베이직)
차이점
컴파일러는 실행 전에 소스코드 점검하여 오류 수정과 불필요한 부분을 정리하여 최적화된 실행 파일 생성한다.
반면에 인터프리터는 한 줄씩 위에서부터 아래로 실행되므로 같은 일을 반복하는 경우나 필요 없는 변수를 확인하지 못한다.
또한, 컴파일러 방식 언어는 변수 선언이 선행되어야 하지만, 인터프리터 방식의 언어는 변수를 미리 선언할 필요가 없다.
따라서, 대형 프로그램엔 컴파일러를, 간단한 프로그램엔 인터프리터를 사용한다.

2. 컴파일 과정에 대해 설명하시오.

소스코드 작성 및 컴파일
컴파일러가 소스코드를 일차 번역하여 0과 1로 이루어진 목적 코드 생성
목적 코드와 라이브러리 연결
라이브러리에 있는 코드를 목적 코드에 삽입하여 최종 실행 파일 생성
동적 라이브러리를 포함하여 최종 실행
실제 실행하는 시점에 라이브러리에서 실행 코드를 가져와 실행하여 라이브러리의 함수가 변경되거나 오류가 발생해서 수정했을 때 새로 컴파일하지 않아도 됨
실행할 때 삽입되는 함수를 가진 라이브러리가 동적 라이브러리

3. 메모리 관리자가 수행하는 세 가지 작업에 대해 설명하시오.

메모리 관리자(메모리 관리 유닛, MMU)
메모리 관리를 담당하는 주체
가져오기(fetch)
프로세스와 데이터를 메모리로 가져오는 작업
요청 상황에 따라 프로세스와 데이터를 모두 가져오기도 하고, 일부만 가져오기도 한다.
요청이 없더라도 앞으로 미리 필요할 것이라고 예상되는 데이터를 가져오기도 한다.
배치(placement)
가져온 프로세스와 데이터의 메모리 상 위치를 결정하는 작업
선행 조건으로 메모리를 어떤 방식으로 자를 것인지가 반드시 필요
→ 같은 크기로 분할(페이징), 프로세스의 크기에 맞게 분할(세그먼테이션)
재배치(replacement)
꽉 차 있는 메모리에 새로운 프로세스를 가져오기 위해 오래된 프로세스를 내보내는 작업
→ 교체 알고리즘