왜 이 소문제를 따로 배우는가
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=C→Assembly, Assembler=Assembly→Objektdatei, Linker=Objekte→Executable, Loader=Executable을 Hauptspeicher에 적재.
왜 이 답이 되는가
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 정의·정답 범위.

