관련포스트
Inside the C Programming - 아쉽지만 원 저자의 요청으로 비공개가 되었습니다.

관련내용
GNUPro Toolkit Manuals 4. Basic Principles of the Tools


2010년 5월 30일 오후 2시경.

강남구 아무개동 아무개회사에서 GNU Korea의 blueguy님의 세미나가 있었습니다.

제목은 Inside the C Programming 이라는 것이였습니다.

세미나 내용은 Inside the C Programming 의 내용 그대로 진행하였습니다.

Inside the C Programming 의 내용을 보면 학부 3~4학년때 배우는 과목인 System Programming+Operating System+Compiler(앞부분)을 종합하여 넣은 것이라 내공이 상당하게 쌓이지 않은 이상 쉽게 설명하려고 해도 안드로메다로 넘어갈수 있습니다.

학부를 졸업한 사람에게도 내용이 이해되는건 몇개 있고 약간 모르는 내용들이 여러 개씩 나오긴 하지만, 학부생에게 이런 내용 알려주면 거의 상모돌리고 졸아 버릴 위험성이 높겠군요.

Inside the C Programming 에서 다루는 내용을 아래와 같이 압축하여 간단하게 설명하겠습니다.


1. (우선 C언어를 학부때 배웠다는 전제하에서) gcc(the GNU Compiler Collection-GNU C Compiler가 아님.)는 IDE를 가지지 않은 command line compiler이다.

gcc가 하는 일

(1) 사용자에게 옵션과 소스 파일명들의 입력을 받는다.

(2) 소스 파일명의 확장자를 보고 어떤 단계를 처리해야 할지 결정합니다.

(3) 사용자의 옵션을 각각의 단계를 맡고 있는 실행파일의 옵션으로 변경합니다.

(4) 각각의 단계를 맡고 있는 실행파일을 호출(fork와 exec이겠죠?)하여 단계를 수행하도록 한다.

2. gcc는 껍데기이고 내부에서 cpp, as, ld 등에서 처리된다.  (참조: GNUPro Toolkit Manuals 4. Basic Principles of the Tools)

3. 전처리(preprocessing)과정에서는 프로그래밍 컴파일을 하기전 소스코드의 매크로 치환을 합니다. 여기까지는 소스 코드의 parsing을 하지도 않고, 컴파일 과정도 거치지 않으므로 여기까진 어느 플랫폼의 컴파일러가 돌아가던 문제 없이 처리할수 있습니다.
(※ 참고로 전처리 과정은 매크로 치환을 할 뿐이고 에러를 잡을 수 없습니다.)

4. 전처리과정이 끝났으면 C언어 소스의 파싱을 합니다. 여기에서 모든 에러를 걸려줍니다. 전처리과정에선 매크로 치환만 하지 에러는 파싱과정에서 대부분을 잡습니다.

5. 파싱이 끝나고 나선 Assemble 과정을 거칩니다 as(GNU assembler)가 어셈블리 언어로 변환을 해 줍니다.

5. 이후 relocatable object과정을 거칩니다. Assemble과정이 끝나면 Object파일이 생성됩니다. 이 Object파일들을 모아서 어떤 symbol을 참조하는지에 대해서 조사하고 Linking을 하고 메모리상에 Loading을 하게 됩니다. 이를 Linking and Loading이라고 부릅니다.

2시간 동안 진행 되었던 Inside the C Programming (원 저자 요청으로 비공개) 세미나 내용을 매우 압축하여 표현하였으나 여기선 설명이 부족한듯 합니다. -_-;; 상세한 내용은 Inside the C Programming (원 저자 요청으로 비공개)을 보시기 바랍니다.

(참조: GNUPro Toolkit Manuals 4. Basic Principles of the Tools)
Compilation involves up to four stages, always in the following order:

  • preprocessing

  • compiling

  • assembling

  • linking


컴파일러가 컴파일을 하면 preprocessing, compiling, assembling, linking 등의 4단계로 진행된다고 설명할 수 있습니다. 컴파일러가 컴파일하는 것의 내부를 더 뜯어보면 Parsing은 물론이고 컴퓨터 메모리 구조등의 OS 기본지식이 있어야 알수 있는 내용들이 들어있습니다.

역시 컴퓨터공학부 3~4학년 과정 과목인 System Programming, Operating System, Compiler(앞부분) 3과목의 내용을 통틀어 설명하기 때문에 2시간의 세미나가 부족하긴 하더군요. 더 많은 정보를 얻고 싶은 분들은 gcc, cpp, as, ld 등의 manpage와 manual을 참조해야 되는 사실을 보고나선... (한글화가 된 자료는 joinc.co.kr의 내용을 다 읽어보면 빠른 시간내에 이해되실겁니다.)

공부할 것은 많고, 시간은 부족하다.


'컴퓨터 > 프로그래밍' 카테고리의 다른 글

Unicode의 이해 단계는?  (1) 2010.10.11
Inside the C compiler  (0) 2010.05.30
suvbersion 설치 및 사용법 링크  (1) 2010.03.31
Google App Engine으로 Twitter 봇을 구현!  (3) 2010.01.24
Regualr Expressions  (0) 2009.09.15
Buy me a coffeeBuy me a coffee

이번에 모 과목 중간고사 문제 채점을 해보았다.

채점전에 교수님이 직접 문제를 풀라고 하셔서 문제를 풀어보았는데, 윙미?

Linux System에 대해서 좀 안다는 나 조차 문제가 세세하게 나와서 많이 틀렸다 -_-;;


시험문제는 엄청 쉽게 보이다가 결과는 나도 헷갈렸다. @.@

작년에 이런 개념들은 당연히 알고 있는 것도 틀리고 그래서 책을 찾아보아서 개념을 다시 깨우치게 되었다.

작년에 열심히 공부하였던 과목이 1년지나니 개념을 까먹어서 고생하니 이거 내가 뭐랄까 바보가 된 기분이였다.


인간은 망각의 동물이라는 것을 이번 일을 계기로 깨달았고, 다시 책을 보고 복습을 하고 있다. -_-;;


ps. 내가 봐도 시험문제들이 틀릴법한 곳에만 다 낸듯한 기분이 든다. 기본 개념을 묻는 작년 시험과 다름을 한 눈에 볼수 있다.

'일상다반사' 카테고리의 다른 글

옆에선 놀고 있고 나는...  (0) 2008.05.22
Google에서 편지가 왔어요.  (3) 2008.05.18
개강, 새로운 학기, 새로운 출발  (1) 2008.03.03
급성장염에 걸렸습니다.  (0) 2008.02.27
나도 졸업준비를?  (2) 2008.02.25
Buy me a coffeeBuy me a coffee
이번에 모 교수님 학부연구생으로 들어가면서 여러가지 임무를 많이 부여받았습니다.
그 중 하나는 시스템프로그래밍 과제 채점 및 실습 조교로 들어가는 것입니다. -_-;;

시스템프로그래밍을 재미있게 수강하였고, 프로그래밍하는 것을 재미있게 느꼈지만 (시스템프로그래밍은 재미있었는데 OS는 토나올뻔 했던 ㅠㅠ) 내가 이해한 내용을 실제로 가르쳐 주는 것은 엄청나게 어려운것 같습니다.

나도 이 내용 이해하는데에는 엄청난 시간이 소요되었으면서 시스템관리자로서 어떻게 하면 되는지를 직접 부딫쳐가며 알게 되었지만, 실습을 따라가는 수강생들은 *nix(Unix, Linux, Mac OS, FreeBSD등)환경에 익숙하지 않는데다(거의 처음 알게 된 경우도 상당수일듯), 가르치는 내용들마다 익숙하지 않으면 개념을 잡기 힘든 것들이 많습니다.
(※ 수강생들은 나보다 1~2살 나이 많은 복학생 형들 아님 나랑 학번(05학번)이 같은 여학우들이다.)

실습을 진행하면서 느낀점은 내가 아무리 잘 알고 있어도 아는 내용을 전달을 하지 못하면 말짱 도루묵이 된다는 사실이다. 그런데 실습을 해보면 몇몇 따라가는 사람 빼고는 따라가는 것이 벅찬 사람들이 널리긴 널린 것 같다.
익숙하지 않는 내용인 *nix시스템에 대해서 전달이 잘 안되면 예습을 해봐도 이해 안되면 실습 따라가는 것이 힘들고, 프로그래밍 하는 것도 어렵기 때문에 이 것을 어떻게 쉽게 알려줄 수 있을까가 고민된다.

실습조교로 들어가면서 나보다 나이 많은 사람들에게 가르치는 것도 엄청난 부담에다, 나랑 동갑인 같은 학번 학우들도 있기때문에 실습 준비에 대해서 철저하게 준비를 해도 겁이 나긴 마찬가지이다.
후배들 가르치는 것을 해보았는데 후배들 가르치는 것은 심적인 부담이 별로 들지 않는다만, 선배나 동기들에게 가르친다는 것은 엄청나게 심적 부담이 된다.

5월 1일 목요일에 실습을 한번 했더니 식은 땀이 짜르르 흐르면서 체력이 급속도로 빠지는 기분이랄까?
집에 돌아가서 바로 골아 떨어졌을 정도이다.

심적 부담도 심적 부담이지만, 책에 있는 내용을 쉽게 알려주는 것이 엄청나게 어려운 것 같다.
책에 있는 내용을 완벽하게 이해하였다는 전제에서 알려줘야 하기때문에 책의 내용을 꼼꼼히 읽고 어떻게 강의할지를 고민을 해야하기 때문이다. 실습나가기전에 항상 이렇게 알려줄까 저렇게 알려줄까를 고민을 많이 한다.

실습을 나가면서 항상 느끼는 것인데, 내가 모르는 것을 알게 공부 하는 것이랑, 옆에 있는 사람에게 아는 내용을 가르쳐 주는 것이랑 천지차이인것 같다.
모르는 것을 공부하는 것은 나만 이해하면 되니까 나를 위해서만 공부하면 되겠지. 그러나 내가 아는 내용을 가르쳐주는 것은 내가 아는 내용을 다 이해하고 습득하여 나만의 것으로 완벽하게 소화하여 이것을 남에게 알려줘야 하기때문에 힘들다.

이렇게 해보니까 대학원생들은 정말 고생 많이 하는것을 알게 되었고, 교수님들도 수업준비 꼼꼼하게 한다는 것을 알게 되었다.


ps. 이제 실습도 6월 중순까지 하고, 마지막과제 채점을 끝마치면 얼마나 진이 빠질지가 궁금하다.
ps2. 요즘따라 3학년 2학기때 OS과제하던 체력이 사라진듯 하다. 항상 피곤에 빠진 것 같다.ㅠㅠ

'생각들' 카테고리의 다른 글

이런 대현이 되고 싶어요.  (0) 2008.05.22
커뮤니티와 그 적敵들  (0) 2008.05.16
취향테스트 결과  (0) 2008.02.28
학원이 만병통치약인가?  (0) 2008.01.16
골치가 아픕니다.  (2) 2007.12.31
Buy me a coffeeBuy me a coffee
이번에 리눅스커널책을 사서 공부하다가 리눅스 커널 만지는 재미에 푹 빠졌다.
생각보다 재미있군. 근데 재부팅하는게 귀찮어 -_-;;
reboot 치거나 shutdown -hr 치거나 init 6 치거나 재부팅하는 명령어는 거기서 거기라 내키는대로 -_-;;
 
리눅스 커널책들을 보니까 내가 1학기때 배웠던 시스템프로그래밍을 대충 공부한 느낌이 든다 이거원 -_-;;
3학년 1학기때 열심히 공부한것같은데 왜이리 대충공부한 느낌이 나지?

이것저것 만지작하다 보면 벌써 밤이다. 너무 재미들린 것 같다.
나 1~2년전 방학때에는 노느라 알바하라 정신이 없었는데 이제는 공부에 재미걸렸으니 나도 신기할 정도.

(성적표 나왔는데 전공은 생각보다는 좋지도 않고 나쁘지도 않는 성적나와서 짜증나고, 교양 학점은 전공보다 더 안나와서 캐안습 ㅠㅠ)

'일상다반사' 카테고리의 다른 글

여름방학때 어떻게 지냈었지?  (1) 2007.07.27
내 얼굴의 심슨화??  (1) 2007.07.25
살 것 목록  (3) 2007.07.21
클랴님을 뵈었습니다.  (4) 2007.07.19
대단하신 교수님  (5) 2007.07.19
Buy me a coffeeBuy me a coffee

+ Recent posts