///////
Search
1️⃣

연습문제 1 ~ 4

1. 소스코드를 한 번에 번역하지 않고 한 행씩 번역하여 실행하는 방식을 무엇이라 하는가?

인터프리터 방식

인터프리터의 특성

컴파일러는 소스코드 전체를 훑고 컴퓨터 프로세서가 실행 할 수 있도록 바로 기계어로 변환한다. 인터프리터는 고레벨 언어를 중간 코드로 변환하고 이를 각 행마다 실행한다. 이 중간 코드는 다른 프로그램에 의해 실행된다.
일반적으로 컴파일러가 각 행마다 실행하는 특성을 가진 인터프리터보다는 실행시간이 빠르다.
컴파일러는 전체 소스코드 변환 후 에러를 보고하지만 인터프리터는 각 행마다 실행하는 도중 에러가 보고되면 이후 작성된 코드를 보지 않는다. 보안적인 관점에서 도움이 된다.
파이썬은 인터프리터 언어, C,C++은 컴파일 언어, 자바는 컴파일러와 인터프리터 모두 사용한다.

2. 프로그래머가 C나 자바로 소스코드를 작성하여 컴파일하면 일차적으로 만들어지는 코드는 무엇인가?

목적 코드

3. 컴파일할 때 코드에 라이브러리를 연결하지 않고 코드를 실행할 때 라이브러리를 가져와 실행하는 방식을 무엇이라 하는가?

동적 라이브러리

동적 라이브러리

필요시 사용할 수 있도록 최소한의 정보만 포함하여 링크
정적 라이브러리와 다르게 컴파일할 때 코드가 복사되지 않고 프로그램 시작 시 로딩
정적 라이브러리에 비해 프로그램의 사이즈가 작고 메모리 공간을 적게 차지

정적 라이브러리

정적 라이브러리의 코드는 실행 파일에 포함되기 때문에 프로세스가 생성될 때 메모리에 할당
정적 라이브러리가 추후 제거되더라도 이미 생성된 실행파일을 실행하는 데는 아무런 문제가 없다.

4. 메모리 관리 정책 중 메모리가 꽉 찼을 때 메모리에 있는 어떤 프로세스를 내보낼지 결정하는 것은 무엇인가?

재배치

메모리 관리자의 역할

가져오기(fetch), 배치(placement), 재배치(replacement)
1.
가져오기 : 프로세스가 필요로 하는 데이터를 언제 메모리에 가져올지 결정하는 정책
필요하다고 예상되는 데이터를 미리 가져오는 방법도 존재(prefetch)
2.
배치 : 가져온 프로세스를 어떤 위치에 올려놓을지 결정하는 정책
페이징 : 메모리를 같은 크기로 자르는 것
세그먼테이션 : 프로세스의 크기에 맞게 자르는 것
3.
재배치 : 메모리가 꽉 찼을 때 메모리 내에 어떤 프로세스를 내보낼지 결정하는 정책
앞으로 사용하지 않을 프로세스를 찾아 내보내는 것 (교체 알고리즘)