왜 이 소문제를 따로 배우는가
Werkzeugkette 문제는 이름 암기가 아니라 변환 전후 산출물을 추적하는 문제입니다. 이 사슬을 정확히 잡으면 pseudo instruction, Objektdatei, 실행 파일이 어느 단계에 속하는지도 혼동하지 않습니다.
이 페이지는 Aufgabe 1의 공통 템플릿이 아니라 1a Werkzeugkette 4개 역할 매칭에 필요한 내용만 담습니다. 챕터 전체 배경이 필요하면 Aufgabe 1 개념 수업을 먼저 읽으세요.
이 소문제에서 실제로 쓰는 용어
정의뿐 아니라 이 문제의 어느 판단에 쓰이는지까지 연결합니다.
- Compiler
- 고급 언어 source code를 더 낮은 수준의 Assembly로 번역하는 프로그램입니다.이 소문제에서: 입력이 C이고 출력이 Assembly인 정의를 판별할 때 사용합니다.
- Assembler
- Assembly instruction을 machine code가 든 Objektdatei로 바꾸는 프로그램입니다.이 소문제에서: Assembly와 Objektdatei 사이의 변환을 맡는 항목을 찾을 때 사용합니다.
- Linker
- 여러 Objektdatei와 library를 결합하고 symbol reference를 해결해 Executable을 만듭니다.이 소문제에서: 아직 메모리에 올리기 전, 파일들을 하나의 실행 파일로 완성하는 정의를 고릅니다.
- Loader
- Executable의 실행에 필요한 내용을 Hauptspeicher에 배치하고 실행 준비를 합니다.이 소문제에서: 완성된 Executable을 실제 실행 상태로 옮기는 마지막 단계를 식별합니다.
이 소문제 전용 규칙과 종이 작업
입력→출력 우선 규칙
도구 이름보다 정의 속 입력물과 출력물을 먼저 표시하면 인접 단계인 Linker와 Loader도 구분할 수 있습니다.
종이에: 각 정의 옆에 `입력 → 출력` 한 줄을 먼저 적습니다.
단방향 Werkzeugkette 규칙
정상 변환 순서는 `C → Assembly → Objektdatei → Executable → Hauptspeicher`이며, 각 화살표가 정확히 한 도구에 대응합니다.
종이에: 답을 고르기 전에 다섯 산출물을 화살표로 잇고 정의를 해당 화살표 위에 놓습니다.
Aufgabe 전체 흐름은 챕터 흐름도에서 확인할 수 있습니다. 여기서는 현재 판단에 직접 필요한 규칙만 적용합니다.
이 소문제 전용 작은 예제
설명 A는 `.s` 파일을 받아 relocation 정보가 든 `.o` 파일을 만들고, 설명 B는 두 `.o` 파일의 외부 symbol을 해결해 실행 파일을 만든다. A와 B의 도구를 판별하세요.
주어진 것
- `.s`는 Assembly source입니다.
- `.o`는 아직 독립적으로 실행할 수 없는 Objektdatei입니다.
- 설명 A의 입력과 출력을 표시합니다.
Assembly에서 Objektdatei로의 경계를 찾으면 도구가 하나로 결정됩니다.
종이 산출물: `.s(Assembly) → .o(Objektdatei)`
- 설명 B가 해결하는 대상과 최종 산출물을 표시합니다.
여러 Objektdatei의 symbol 결합은 적재가 아니라 파일 완성 작업입니다.
종이 산출물: `.o 여러 개 + symbol 해결 → Executable`
- 두 화살표를 Werkzeugkette의 도구 이름에 연결합니다.
입출력 사슬과 도구 정의가 일치해야 추측이 아닌 판별이 됩니다.
종이 산출물: A=Assembler, B=Linker
예제 답과 독립 검산 보기
A는 Assembler이고 B는 Linker입니다.
독립 검산: B의 출력이 Hauptspeicher가 아니라 디스크의 Executable인지 확인합니다. 그렇다면 Loader가 아닙니다.
이제 실제 시험 문제를 micro-work로 풀기
공식 시험이 요구하는 것
Compiler, Assembler, Linker, Loader를 정의에 연결하고 남는 정의를 표시하세요.
공식 답을 보기 전, 내 답 먼저 남기기
완성 문장이 아니어도 좋습니다. 중간값·register·cycle·cache state처럼 채점 가능한 흔적을 먼저 적으세요.
각 작업의 중간 산출물을 직접 적고 완료 조건을 만족한 뒤 체크하세요. 단계별 이유·산출물·오류가 현재 소문제에 맞게 따로 작성되어 있습니다.
각 정의에서 입력 대상을 찾습니다.
- 왜 하는가
- 같은 ‘변환’ 표현이라도 C, Assembly, Objektdatei, Executable 중 무엇을 받는지에 따라 담당 도구가 달라집니다.
- 종이 산출물
- 정의마다 `입력:` 뒤에 C/Assembly/Objektdatei/Executable 중 하나를 적습니다.
- 완료 조건
- 네 정의 모두에 입력물이 하나씩 표시되어 있습니다.
막혔을 때 단계 힌트·대표 오류
힌트: 문장에서 ‘무엇을 받아’ 또는 동사의 목적어를 찾으세요.
이 단계의 대표 오류: ‘번역한다’라는 동사만 보고 Compiler로 고정하는 것입니다.
각 정의에서 출력 산출물을 찾습니다.
- 왜 하는가
- 인접 도구는 입력이 비슷해 보여도 출력이 파일인지 실행 중 memory 상태인지로 갈립니다.
- 종이 산출물
- 각 입력 오른쪽에 화살표와 출력물을 이어 적습니다.
- 완료 조건
- 네 줄이 모두 `입력 → 출력` 형태가 됩니다.
막혔을 때 단계 힌트·대표 오류
힌트: Executable을 ‘만드는가’, 이미 있는 Executable을 ‘적재하는가’를 구분하세요.
이 단계의 대표 오류: Executable과 Hauptspeicher 적재 상태를 같은 출력으로 취급하는 것입니다.
입출력 쌍을 전체 Werkzeugkette에 배치합니다.
- 왜 하는가
- 전체 순서에 놓아 보면 도구를 하나씩만 써야 한다는 일관성 검사가 가능합니다.
- 종이 산출물
- `C —Compiler→ Assembly —Assembler→ Objekt —Linker→ Executable —Loader→ Memory`를 완성합니다.
- 완료 조건
- 네 도구가 중복 없이 네 화살표에 하나씩 놓였습니다.
막혔을 때 단계 힌트·대표 오류
힌트: CPU가 실행할 준비가 되는 것은 사슬의 맨 마지막입니다.
이 단계의 대표 오류: Linker와 Loader의 순서를 바꾸는 것입니다.
Werkzeugkette 밖의 emulation 정의를 제외합니다.
- 왜 하는가
- machine code를 다른 hardware처럼 emulieren하는 일은 네 변환 도구의 입력→출력 역할과 일치하지 않습니다.
- 종이 산출물
- 해당 정의 옆에 `제외: Emulator 역할`이라고 표시합니다.
- 완료 조건
- 남는 정의가 왜 네 도구 중 어느 것에도 해당하지 않는지 한 문장으로 설명할 수 있습니다.
막혔을 때 단계 힌트·대표 오류
힌트: 새 파일을 만드는지, memory에 적재하는지 먼저 물어보세요.
이 단계의 대표 오류: machine code라는 단어만 보고 Assembler와 연결하는 것입니다.
공식 답을 열기 전 마지막 회상
Assembler의 입력과 출력은 각각 무엇인가요?
내 풀이 후 공식 결론·이유·대표 함정 확인
공식 결론
Compiler=Hochsprachencode→Assemblercode, Assembler=Assemblercode→Maschinencode/Objektdatei, Linker=여러 Objektdatei→하나의 ausführbare Datei, Loader=ausführbare Datei→Hauptspeicher. 남는 정의는 ‘Maschinencode direkt auf der Hardware emuliert’이며 Emulator에 해당합니다.
왜 이 답이 되는가
C 코드는 곧바로 CPU에서 실행되지 않습니다. Compiler가 C→Assembly, Assembler가 Assembly→Objektdatei, Linker가 여러 Objektdatei→Executable, Loader가 Executable→Hauptspeicher를 담당합니다.
대표 함정
Linker와 Loader를 뒤집지 마세요. Linker가 파일을 완성한 뒤 Loader가 실행 상태로 옮깁니다.
시험지 문장별 정답 해설
아래 항목은 시험지 순서를 그대로 유지합니다. 각 문장마다 원문, 번역, 정답, 판단 근거, 실제 답안 문장을 한곳에서 확인하세요.
정의 1 → Assembler · 정답: Assembler
시험지 원문: Ein Programm, das Assemblercode in Maschinencode (Objektdateien) überführt.
한국어 번역: 어셈블리 코드를 기계어 코드(오브젝트 파일)로 변환하는 프로그램이다.
왜 이 답인가: 문장의 입력은 Assemblercode이고 출력은 Maschinencode가 담긴 Objektdatei입니다. 이 변환을 담당하는 도구가 Assembler이므로, 표의 Assembler를 이 정의에 연결합니다.
답안지에 쓸 문장: Assembler → Assemblercode를 Maschinencode(Objektdatei)로 변환
정의 2 → Loader · 정답: Loader
시험지 원문: Ein Programm, das eine ausführbare Datei in den Hauptspeicher lädt, damit diese ausgeführt werden kann.
한국어 번역: 실행 파일을 실행할 수 있도록 주기억장치에 적재하는 프로그램이다.
왜 이 답인가: 이미 완성된 ausführbare Datei를 새 파일로 바꾸는 것이 아니라 Hauptspeicher에 lädt(적재)합니다. 실행 파일을 메모리에 올리는 마지막 단계이므로 Loader입니다.
답안지에 쓸 문장: Loader → ausführbare Datei를 Hauptspeicher에 적재
정의 3 → Compiler · 정답: Compiler
시험지 원문: Ein Programm, das Hochsprachencode (z. B. C-Code) in Assemblercode übersetzt.
한국어 번역: 고급 언어 코드(예: C 코드)를 어셈블리 코드로 번역하는 프로그램이다.
왜 이 답인가: 입력이 Hochsprachencode/C-Code이고 출력이 Assemblercode입니다. 고급 언어를 어셈블리로 낮추는 단계가 Compiler이므로 Compiler를 연결합니다.
답안지에 쓸 문장: Compiler → Hochsprachencode(C)에서 Assemblercode로 번역
정의 4 → 남는 정의 · 정답: 연결하지 않음(Emulator 역할)
시험지 원문: Ein Programm, das Maschinencode direkt auf der Hardware emuliert.
한국어 번역: 기계어 코드를 하드웨어에서 직접 에뮬레이션하는 프로그램이다.
왜 이 답인가: Compiler·Assembler·Linker·Loader 가운데 어느 것도 machine code를 emulieren하는 도구가 아닙니다. 문제에서 하나의 정의가 남는다고 했으므로 이 정의를 지우거나 연결하지 않습니다.
답안지에 쓸 문장: 남음 / streichen: Emulator 설명
정의 5 → Linker · 정답: Linker
시험지 원문: Ein Programm, das verschiedene Objektdateien zu einer einzigen ausführbaren Datei zusammenfügt.
한국어 번역: 여러 오브젝트 파일을 하나의 실행 파일로 합치는 프로그램이다.
왜 이 답인가: 입력은 mehrere Objektdateien이고 출력은 eine einzige ausführbare Datei입니다. 여러 object file과 symbol을 결합해 executable을 만드는 도구가 Linker입니다.
답안지에 쓸 문장: Linker → 여러 Objektdateien을 하나의 ausführbare Datei로 결합
1a에서 정확히 무엇에 답하는가
이 소문제의 답안 대상: Compiler, Assembler, Linker, Loader를 정의에 연결하고 남는 정의를 표시하세요.
- 각 정의에서 입력 대상을 찾습니다.
판단 이유: 같은 ‘변환’ 표현이라도 C, Assembly, Objektdatei, Executable 중 무엇을 받는지에 따라 담당 도구가 달라집니다.
답안지에 남길 중간 결과: 정의마다 `입력:` 뒤에 C/Assembly/Objektdatei/Executable 중 하나를 적습니다. - 각 정의에서 출력 산출물을 찾습니다.
판단 이유: 인접 도구는 입력이 비슷해 보여도 출력이 파일인지 실행 중 memory 상태인지로 갈립니다.
답안지에 남길 중간 결과: 각 입력 오른쪽에 화살표와 출력물을 이어 적습니다. - 입출력 쌍을 전체 Werkzeugkette에 배치합니다.
판단 이유: 전체 순서에 놓아 보면 도구를 하나씩만 써야 한다는 일관성 검사가 가능합니다.
답안지에 남길 중간 결과: `C —Compiler→ Assembly —Assembler→ Objekt —Linker→ Executable —Loader→ Memory`를 완성합니다. - Werkzeugkette 밖의 emulation 정의를 제외합니다.
판단 이유: machine code를 다른 hardware처럼 emulieren하는 일은 네 변환 도구의 입력→출력 역할과 일치하지 않습니다.
답안지에 남길 중간 결과: 해당 정의 옆에 `제외: Emulator 역할`이라고 표시합니다.
따라서 도출되는 공식 답: Compiler=Hochsprachencode→Assemblercode, Assembler=Assemblercode→Maschinencode/Objektdatei, Linker=여러 Objektdatei→하나의 ausführbare Datei, Loader=ausführbare Datei→Hauptspeicher. 남는 정의는 ‘Maschinencode direkt auf der Hardware emuliert’이며 Emulator에 해당합니다.
답이 이어지는 핵심 인과: C 코드는 곧바로 CPU에서 실행되지 않습니다. Compiler가 C→Assembly, Assembler가 Assembly→Objektdatei, Linker가 여러 Objektdatei→Executable, Loader가 Executable→Hauptspeicher를 담당합니다.
이 답에 붙는 주의: Linker와 Loader를 뒤집지 마세요. Linker가 파일을 완성한 뒤 Loader가 실행 상태로 옮깁니다.
새 문제로 전이하기
세 문항은 앞 문장의 반복이 아닙니다. 직접 답을 입력하면 rubric의 필수 기준을 하나씩 검사하고, 첫 누락 기준을 알려 줍니다.
1. 개념 재구성
빈 종이에 C source가 실행되기까지의 다섯 상태와 그 사이 네 도구를 순서대로 복원하고, Linker와 Loader의 출력 차이를 한 문장으로 설명하세요.
파일을 ‘완성’하는 단계와 memory에 ‘배치’하는 단계를 나누세요.
제출 후 모델 답 보기
`C → Compiler → Assembly → Assembler → Objektdatei → Linker → Executable → Loader → Hauptspeicher`. Linker는 Executable 파일을 만들고 Loader는 그 Executable을 Hauptspeicher에 적재합니다.
2. 변형 문제
프로그램 `main.o`가 library의 `print` symbol을 참조한다. X는 이 참조를 해결해 `app.exe`를 만들고, Y는 `app.exe`의 segment를 RAM에 배치한다. X와 Y를 판별하고 각각의 출력도 적으세요.
symbol 해결과 segment 적재는 서로 다른 시점입니다.
제출 후 모델 답 보기
X=Linker, 출력은 Executable인 `app.exe`; Y=Loader, 출력은 Hauptspeicher에 배치된 실행 image입니다.
3. 오류 진단
학생이 ‘Loader가 여러 `.o` 파일을 묶어 Executable을 만들고 Linker가 그 파일을 RAM에 올린다’고 썼습니다. 첫 오류를 지적하고 두 역할을 바로잡으세요.
이름보다 각 단계의 출력물을 확인하세요.
제출 후 모델 답 보기
첫 오류는 Objektdatei 결합을 Loader 역할로 둔 것입니다. 여러 `.o`를 결합해 Executable을 만드는 것은 Linker이고, 그 Executable을 RAM/Hauptspeicher에 적재하는 것은 Loader입니다.
이 소문제를 끝냈다고 말할 수 있는 기준
이 소문제의 정확한 공식 페이지와 대조하기
왼쪽은 문제를 읽을 때, 오른쪽은 자신의 풀이를 끝낸 뒤에 확인하세요. 해설 이미지를 먼저 보면 중간 과정을 스스로 만드는 연습이 사라집니다.
Source: Probeklausur.pdf / Probeklausur Musterlösung und Hinweise.pdf · 시험 p3–5 · 공식 해설 p3–6 · SoSe26 Probeklausur 시험 p3 Aufgabe 1a 및 공식 해설 p3의 Werkzeugkette 정의·정답 범위.

