01 하드웨어, 소프트웨어, 펌웨어를 구분하라.

하드웨어란 컴퓨터 시스템의 물리적 부품을 뜻한다. 예를 들면 프로세서, 메인 메모리, 입출력 장치 등이 있다. 소프트웨어는 이 하드웨어들을 관리하는 프로그램이다. 소프트웨어는 하드웨어에 명령어를 주거나 다른 소프트웨어에 입력을 제공함으로써, 그것이 수행하도록 구현된 기능을 수행한다. 펌웨어는 종종 읽기 전용 메모리가 부착된 영구 저장소에 저장되는 실행 가능한 명령어들이다. 펌웨어는 마이크로프로그래밍으로 프로그래밍하는데, 이는 컴퓨터의 기계어보다 아래에 있는 프로그래밍 계층을 말한다. 펌웨어는 기계어 명령어들을 구현하는 데 필요한 간단하고 기초적인 명령어들을 명시한다.

[교수님 답]

하드웨어는 프로세서, 메모리, 하드디스크, 입출력장치와 통신 장치를 포함하는 컴퓨터 시스템의 장치를 말함. 소프트웨어는 하드웨어에 의해 수행되어지도록 프로그래머가 작성한 명령어 집합을 말함.

펌웨어는 영구히 저장되는 마이크로코드 명령어들로 이루어져 있으며, 이러한 명령어들은 기계어에 의해 지정된 타스크들을 수행한다. 펌웨어는 소프트웨어 명령어들을 명시하지만 하드웨어 부분이다.


04 다음 목록을 가장 빠르고 비싼 메모리에서 가장 느리고 저렴한 메모리 순서로 정렬하라.


2차 저장소/레지스터/메인 메모리/3차 메모리/L2 캐시/L1 캐시


레지스터 > L1 캐시(프로세서) > L2 캐시(메인 보드) > 메인 메모리 > 3차 메모리 > 2차 저장소


[교수님 답]

- 비용 순서: 레지스터, L1 캐시, L2 캐시, 메인 메모리, 2차 저장소, 3차 메모리

- 가장 빠르고 비싼 메모리인 레지스터를 (컴퓨터) 시스템의 모든 메모리로 채울 수 있다면 매우 좋겠지만, 시스템의 가격이 매우 비싸지기 때문에 비현실적이다. 또한 시스템을 가장 싸게 만들려면 가장 싼 3차 메모리를 사용하면 되지만 이것은 시스템을 매우 느리게 만들기 때문에 문제가 된다. 빈번히 사용되는 데이터는 보다 빠른 종류의 메모리에 저장되고 많은 데이터 양을 저장할 경우에는 보다 느린 메모리에 저장하는 형태로 다양한 종류의 메모리를 사용하는 것이 비용효과적이면서 성능을 향상시킨다. 일반적으로 보다 빠른 메모리는 휘발성 성질을 가지고 있어서 시스템은 데이터를 분실하지 않는 영구히 저장되는 형태의 저장장치/메모리를 가지고 있어야 한다.

- 캐싱 기술은 (미래에 사용되어질 것으로 생각되어지는) 데이터의 복사본을 빠른 메모리에 저장함으로써 메모리의 접근(읽기/쓰기)을 빠르게 하는 방법이다. 캐시가 사용되기 때문에 컴퓨터 시스템이 느린 메모리에 많은 양의 데이터를 저장할 수 있다.


07 최소 권한의 원칙과 사용자 모드, 커널 모드, 특권 명령어의 관계를 설명하라.

 최소 권한의 원칙이란, 어떤 시스템이든 다양한 객체에 자기 임무를 수행하는데 필요한 능력 이상을 부여하면 안 됨을 나타낸다. 운영체제는 여러 영역에서 최소 권한의 원칙을 적용한다

컴퓨터 시스템은 보통 사용자 모드와 커널 모드로 나뉜다. 사용자 모드에서는 최소 권한의 원칙에 따라 특권 명령어는 이용할 수 없다. 특권 명령어란, 사용자 모드에서는 접근할 수 없고 커널 모드에서만 접근이 가능한 명령어를 뜻한다. 이렇게 해야만 모든 소프트웨어가 우연 혹은 고의로 시스템에 손상을 주거나 허가받지 않은 자원에 접근하는 것을 막아 시스템을 보호한다.


[교수님 답]

최소 권한 원칙은 프로그램들이 그들의 기능을 수행할 때 필요한 권한의 수준만을 가져야 하지 그 이상의 권한을 가지면 안된다는 것을 말한다. 이 원칙은 시스템의 고의적 혹은 악의적인 손상을 막는다. 최소 권한 원칙의 가장 단순한 구현의 하나가 사용자 모드와 커널모드의 2가지 모드로 나누는 것이다. 사용자는 사용자 모드에서 수행하고 운영체제는 커널모드에서 수행한다. 특권 명령어는 커널 모드에서만 수행할 수 있다. 사용자는, 예를 들면, 사용자 모드에서는 임의의 입출력을 수행하지 못하고 보호되지 않은 메모리를 접근할 수 없다.



08 메모리 보호를 구현하기 위한 몇 가지 기술을 설명하라.

메모리 방지 기능은 특권 명령어로만 수정할 수 있는 프로세서 레지스터를 사용해 구현한다. 시스템은 프로세스가 할당받은 메모리의 시작과 끝 위치를 명시하는 경계 레지스터를 제공해 프로세스들이 자신이 할당받지 않은 메모리 위치에 접근하는 것을 막는다. 특정 주소가 할당된 블록 안에 있는지 확인해 메모리 보호를 강화할 수도 있다


[교수님 답]

경계 레지스터들은 프로그램이 접근하는 주소들의 연속적인 범위를 지정하는데 사용되어, 이 범위 밖의 주소를 참조하는 것을 허용하지 않게 한다. 프로세스들이 가상 주소에 대응되는 물리적 주소를 모르기 때문에 메모리 보호 기능을 제공한다. 즉, 프로세스는 운영체제의 허가 없이 물리적 주소를 접근할 수 없다.


09 이중 버퍼링은 입출력 채널과 프로세서가 병행해 동작할 수 있게 해주는 기술이다. 예를 들면, 이중 버퍼링 입력 시에 프로세서가 한 버퍼에서 데이터 일부분을 소비하는 동안, 채널은 다음 부분의 데이터를 다른 버퍼에 읽어들인다. 따라서 프로세서가 다음 데이터를 바로 읽을 수 있도록 준비한다. 삼중 버퍼링 구조가 어떻게 작동할 것인지 설명하라. 어떤 환경일 때 삼중 버퍼링이 효율적이겠는가?

삼중 버퍼링은 그래픽카드에서 수직동기를 사용할 때 효율적이다. 모니터의 신호에 맞춰서 GPU가 이미지를 그려내는 것을 수직동기라 한다


[교수님 답]

3중 버퍼 입력 구조를 고려하자. 먼저 (입력) 채널이 데이터를 읽어 버퍼1에 저장한다. 프로세서는 버퍼1의 데이터를 처리하기 때문에 채널은 버퍼2에 데이터를 저장한다. 그래서 데이터가 버퍼2의 데이터가 필요할 때 프로세서는 그 데이터를 바로 사용할 수 있게 된다. 채널이 버퍼2에 데이터를 저장하는 것을 마칠 때 채널은 버퍼3에 데이터를 저장하기 시작한다. 채널이 더 많은 데이터를 저장하고자 할 때 프로세서가 버퍼1의 데이터를 처리하는 것을 끝날 때까지 기다린다. 프로세서가 버퍼 1의 데이터에 대한 처리가 끝나면 채널은 데이터를 버퍼 1에 저장할 수 있다. 이러한 방법으로 버퍼2, 버퍼3, 버퍼1의 순으로 순환하면서 저장하고 처리하게 된다.

- 버퍼는 상대적으로 많은 저장공간을 차지한다. 그래서 3중 버퍼 구조를 구현하기 전에 그 구현을 할 필요가 있는지를 알 필요가 있다. 명백히 3중 버퍼 입력 구조에서 프로세서가 채널보다 빠르면 3번째 버퍼를 사용하지 못한다. 즉, 버퍼2에 채널이 데이터를 저장할 때 버퍼1의 데이터를 프로세서가 처리하기 때문에 버퍼3을 사용할 이유가 없이 버퍼1을 사용하면 된다. 이론적으로는 다중 버퍼 구조는 한 장치(예: 프로세서)가 다른 장치(예: 입력 채널)보다 약간 성능이 앞설 때, 프로세서의 우연한 느린 동작 때문에 발생하는 문제를 제거하기 위하여 사용된다. 즉 프로세서가 느리게 동작함으로써 채널이 버퍼2에 데이터를 다 저장하였음에도 불구하고 버퍼1의 데이터를 처리하지 못한 경우 버퍼3을 채널이 사용하여야 한다.


10 프로세서와 장치들 사이의 통신을 다룰 수 있는 두 가지 기술은 무엇인가?

버스와 스풀링이다. 버스는 하드웨어 장치 간에 정보를 나르는 트레이스의 집합 혹은 전기적 연결이다. 하드웨어 장치는 다른 장치와 통신할 때 버스를 통해 전기 신호를 보낸다. 스풀링은 한 프로세스와 저속 또는 버퍼가 제한된 입출력 장치 사이에 디스크와 같은 중간 매개체를 두는 기술이다


[교수님 답]

 2개의 기술은 인터럽트와 폴링 방식이다. 폴링 방법으로써 프로세서는 입출력 채널에 대해 서비스를 할 수 있는지를 알기 위하여 반복적으로 해당 채널의 상태를 확인해야 한다. 이 방법은 프로세서가 채널에 대해 항상 제어할 수 있지만 장치가 사용가능한 지를 확인하는 데 불필요한 시간을 낭비한다. 인터럽트 방식에서는 서비스를 필요로 하는 채널은 인터럽트라는 하드웨어 신호를 생성하여 프로세서에게 보내면 프로세서는 바로 해당 채널에게 서비스를 제공한다. 이 경우에는 프로세서의 서비스를 받을 때까지 시간을 허비하지 않는다.



14 다음 유형의 프로그래밍 언어에 대해 생각해보자.


i. 기계어

ii. 어셈블리 언어 

iii. 고급 언어

iv. 객체지향 프로그래밍 언어 

v. 구조적 프로그래밍 언어


위의 분류 중 다음에 묘사하는 것과 가장 잘 부합하는 것은 무엇인가? 답이 여러 개 있을 수도 있다.


a. 사물(명사)을 조작하는 데 초점을 둔다. : 객체지향 프로그래밍 언어

b. 특정 프로세서가 이해할 수 있는 형태로 변환하는 번역 프로그램이 필요하다. : 고급 언어

c. 01을 사용해 작성한다. : 기계어

d. 소프트웨어 개발에 대한 체계적인 접근법을 정의하며 동작(동사)에 초점을 둔다. : 구조적 프로그래밍 언어

e. 영어와 유사한 약어들을 사용해 기초적인 컴퓨터 기능을 명시한다. : 어셈블리 언어

f. 자바와 C++가 이에 속한다. : 객체지향 프로그래밍 언어, 고급 언어

g. 포트란과 파스칼이 이에 속한다. : 구조적 프로그래밍 언어

 h. 프로그래머들이 일상적인 영어 단어를 사용하여 프로그램을 작성할 수 있게 해주며, 일반적인 수학적 기호들을 포함한다. : 고급 언어


[교수님 답]

a. 사물 조작에 초점 : 객체지향프로그래밍 언어

b. 특정프로세서가 이해할 수 있는 형태로 변환하는 번역프로그램이 필요 : 기계어를 제외한 모든 언어

c. 0과 1을 사용하여 자성 : 기계어

d. 소프트웨어 개발에 대해 체계적인 접근법을 정의하며 동작에 초점 : 구조적프로그래밍 언어

e. 영어와 유사한 약어들을 사용해 기초적인 컴퓨처 기능을 명시 : 어셈블리언어

f. 자바와 C++ : 객체지향프로그래밍언어와 고급언어

g. 포트란과 파스칼 : 구조적프로그래밍 언어 와 고급언어

h. 프로그래머들이 일상적인 영어 단어를 사용하여 프로그램하고 일반적인 수학적 기호들을 포함 : 고급언어, 객체지향프로그래밍언어, 구조적프로그래밍 언어



15 고급 언어로 작성한 프로그램을 실행하려면 어떤 준비가 필요한지 설명하라.

고급 언어로 작성한 프로그램을 실행하려면 먼저 컴파일러라는 번역 프로그램을 통해 기계어로 변환해야 한다. 기계어는 1 또는 0으로 결정되는 숫자의 스트림이다. 기계어는 컴퓨터에 가장 기본적인 연산들을 수행하는 법을 지시한다. 그 다음으로는 실행에 필요한 여러 기계어 프로그램과 링크해야 하며, 메모리에 로드해야 한다


[교수님 답]

1 단계: 소스코드가 오브젝트(object) 코드로 컴파일된다. 오브젝트 코드는 여러 다른 모듈로 나뉘어 질 수 있다.

2단계 : 링커는 이러한 모듈들을 하나의 적재 모듈로 통합한다. 이 때 모듈간 참조하는 내용(외부변수, 함수)들을 해결하고 라이브러리 파일들을 연결한다.

3 단계 : 로더(loader)는 프로그램이 위치하는 메모리의 부분을 반영하도록 링커에 의해 설정된 상대적 주소들을 수정한다. 로더는 마지막으로 프로그램을 메모리에 적재한 후 수행한다.



16 절대 로더와 재배치 가능한 로더를 비교하라. 재배치 가능한 로딩 개념과 관련된 몇 가지 동기를 설명하라.

절대 로딩이란 가상 메모리를 지원하지 않는 시스템에서, 로드 모듈이 이미 메모리에서 물리 주소를 명시하는 경우, 로더는 단순히 명령어와 데이터를 프로그래머나 컴파일러가 명시한 주소에 두는 것을 말한다. 재배치 가능한 로딩은 로드 모듈이 실제 메모리 주소로 변환해야 하는 상대 주소를 포함할 때 수행된다. 로더는 프로그램을 둘 메모리 블록을 요청하고, 프로그램의 주소를 메모리에 재배치해야 한다. 동적 로딩은 프로그램의 모듈을 처음 사용하는 시점에 로딩하는 기술이다. 많은 가상 메모리 시스템에서 각 프로세스는 0에서 시작하는 자신의 가상 주소 집합을 가지고 있다. 그러므로 로더는 유효한 메모리 영역에 프로그램을 로딩해야 한다.


[교수님 답]

- 절대 로더는 프로그램과 데이터를 직접 링커 혹은 프로그래머가 지정한 메모리 주소에 위치하여 저장한다. 재배치가능한 로더는 적재(load)할 모듈의 상대적 주소를 메모리 블록내의 주소의 offset에 의해 결정된 절대적 주소로 변환한다. 절대 로더는 재배치가능한 로더보다 단순하고 빠르게 수행한다. 재배치가능한 로더는 보다 유연하기 때문에 메모리의 허비를 최소화한다.

- 재배치가능한 로딩은 절대 로딩보다 시스템 상에 더 많은 프로그램들을 허락한다. 절대로딩은 중첩되는 주소들을 가진 2개의 프로그램은 동신에 수행될 수 없지만 재배치가능한 로딩은 그러한 문제는 없다. 재배치가능한 로딩은 메모리내의 프로그램에 어디에 위치할 것인지에 대해 프로그래머가 알 필요가 없다. 즉 프로그래밍을 좀 더 쉽게 만든다.


반응형

+ Recent posts