본문 바로가기

CS 이론/운영체제

[IPC 체험 -1]

728x90

1. 리눅스 환경의 이해

 

리눅스 - 광범위, 분야 상당히 많음 - 리눅스를 통해서 앱 제작을 배울 예정. (리눅스를 통해서 개발을 할 경우 필요한 내역들을 배울 수 있다) 

 

리눅스의 장점

1. 공개 운영체제, 유닉스와 호환 가능.

2. 강력한 네트워크 기능 제공. 제한된 하드웨어에서도 동작 가능 (Embedded 가능) 

3. 사용자가 임의로 재구성 가능

 

리눅스의 단점

1. 공개 운영체제이므로 문제 발생시 보상 힘들고, 직접 해결해야 한다 (제일 어려운 부분) 

2. 버전 변화가 빠름

 

 

 

2. 

 

C언어에 대한 빌드 과정 (GNU 툴체인에 들어있음)

-> 1. 선행처리 (preprocess) -> #include, #define 처리 (cpp)

-> 2. 컴파일 (compile) -> d어셈블리어 파일 생성 (cc1)

-> 3. 어셈블 (assemble) -> 오브젝트 파일 생성 (as)

-> 4. 링크 ( link) -> elf 형식의 실행 파일 생성 (ld) >> elf (excutable linkable format) : 실행. 링크 가능한 리눅스에서의 최종 파일 형식

 

>> 모든 명령어를 순차적으로 실행하는 명령어가 바로 gcc 명령어이다. (gcc -E, -S, -c  옵션을 통해서  위 단계별 결과물까지만 생성할 수 있다) 

 

>> make 유틸리티 (컴파일 자동화 유틸리티)

>>>> 프로그램의 기능과 구조가 복잡해 실행 파일을 만드는 절차가 복잡할 때 앱 생성자가 같이 만들어서 사용한다. 

>>>>> 변경사항에 대해서만 컴파일을 적용하는 기능이 있음 >> 시간이 매우 단축 ( 큰 프로그램일수록)

 

makefile 은 타겟, 의존파일들, 명령들로 구성된 [규칙]을 구성한다.

>>> 이런 규칙들이 순서대로 여러개 있는게 makefile

 

(Makefile 이 폴더 안에 있으면 make 명령어를 통해 실행가능)

 

규칙의 구조:

---

타겟 : 의존파일 ... 

[탭] 명령

[탭] 명령

---

 

ex)

all (모두가 타겟): hello

        @echo "build finished"

>>> hello --> 해당 명칭의 타겟이 있는지 확인하고 있으면 다른 규칙으로 가서 걔를 수행하고 다시 돌아온다 (함수같이)

>>> 그 후, 의존파일에 의해 (hello) 명령을 수행할지 결정한다. 

 

법칙?

>> 타겟이 실제 파일이고, 의존파일이 실제파일일 때, 타겟이 더 최근 파일 (수정이력상) 일 경우, 명령을 수행하지 않는다. 그 외 (파일 유무, 수정이력 고려) 의 경우 모두 명령을 수행한다. 

 

pg 34, 초기 상태부터 하나한 보면서 해석해보기. 

 

 

728x90