개발/Linux

우분투 환경에서 C언어로 배우는리눅스 프로그래밍-1. 개념정리

huiyu 2017. 7. 2. 16:45

1. 컴퓨터 동작원리

  (1) 폰 노이만 구조
    - 현대 컴퓨터의 주류는 노이만형 컴퓨터
    - 실제 프로그램과 데이터를 모두 메모리에 두고 순차적으로 메모리에서 꺼내실행
     1) 프로그램 카운터가 가리키는 메모리 영역에서 명령을 읽고,
        (Program Counter, PC: CPU 내부에 있는 레지스터 다음에 실행될 명령어의 주소를 갖고 실행할 기계어 코드의 위치 지정, 명령어 포인터라고도 한다.)
     2) 읽어들인 명령의 길이만큼 프로그램 카운터를 갱신
     3) 명령을 따라 연산을 수행

  (2) 고급언어/ 저급언어
     - 프로그래밍 언어의 우열이 아닌 추상도가 높은 기술을 지향하는지, 기계어에 가까운 기술을 지향하는지를 뜻함
     - 기계어는 CPU가 직접 해석하는 코드열, 이렇게 하드웨어에 의존적인 프로그래밍 언어를 저급언어라 함.
     - 반대로 알고리즘을 얼마나 추상적으로 기술할 수 있는지에 역점을 둔 프로그래밍 언어를 고급언어라 한다.

  (3)인터프리터/컴파일러
     - 우리가 이해할 수 있는 형태로 표현한 코드(고급언어/저급언어)를 기계가 해석할수 있는 형식으로 변환시키는 도구
     1) 인터프리터 : 프로그램을 실행할 때 순차적으로 해석하면서 명령을 처리,
        명시적인 코드변환프로세스가 없어 손쉽게 이용할 수 있다는 장점이 있지만, 순차적으로 변환하면서 처리하여 속도가 느림
     2) 컴파일러 : 인간이 이해하는 코드를 기계어 또는 바이트 코드로 변환하는 툴. 실행하기 전에 프로그램을 변환(C는 컴파일러 방식),
        코드변환처리와 프로그램 실행이 분리되어 있어 개발 시간은 걸리나 실행시의 효율은 뛰어남

2. 리눅스 우분투

   (1) 레드햇과 데비안
       -  레드햇은 Red Hat사가 판매하는 리눅스 메이저 배포판. 페도라는 레드햇에서 파생된 호환제품. CentOS는 관련 커뮤니티에서 만든 배포판
         *배포판 : 소프트웨어 조합을 잘 구성해서 하나의 시스템으로 패키징한 것.
       - 레드햇 계열 배포판은 패키지 관리 시스템으로 RPM(Red Hat Package Manager)이라는 형식을 사용
       - 데비안은 소프트웨어를 쉽게 바로 이용하는 것을 목표로 만들어진 배포판, 데스크톱 외에 다양한 플랫폼에서 동작하는 특징. 자유와 무료를 우선시해서 이용, 배포, 수정이 무상이고 함께 만들어가는 시스템을 제창
   (2) 우분투
      - 데비안 계열의 리눅스 배포판
      - 커뮤니티 중심으로 유지보수, 데스크톱용 배포판에 초점.
      - 워드프로세서, 인터넷 접속, 전자메일과 같은 기본 프로그램 외에 프로그래밍에 필요한 도구가 있어 C 학습환경으로는 최적
      - '새로운 데스크톱과 서버를 6개월마다 공개한다'는 기본방침. 매년 4월, 10월에 새로운 버전 공개

3. 패키지 관리 시스템

   (1) 패키지
       - 레드햇 계열에서 쓰는 rpm형식, 데비안 계열에서 쓰는 deb형식, FreeBSD에서 쓰는 ports형식, 솔라리스에서 쓰는 pkg형식 등 존재
       - 새로운 소프트웨어 설치 시 패키지 전개, 소프트웨어 빌드, 실행 호나경에 맞춘 스크립트 실행 등 설치에 필요한 작업을 자동으로 수행
        (리눅스가 널리 보급되기 전에는 일반적으로 소스코드를 받은 후 시스템에 맞게 컴파일 옵션을 조정 후 빌드를 직접 수행)
   (2) 패키지 의존 관계
       - B 라이브러리를 사용하는 A 프로그램이 있다. A를 설치하려면 B를 미리 설치해야 하는데
         패키지 관리 시스템이 없던 시절에는 수동으로 B를 설치한 후 A를 설치해야 했다.
      - 패키지 관리 시스템은 자동으로 B를 설치한 뒤 A를 설치한다.
   (3) 패키지 관리자
      - 우분투에서는 dpkg, apt-get, aptitude같은 패키지 관리용 명령을 이용해 소프트웨어를 설치하고 업데이트하고 필요에 따라 삭제 관리가 가능

4. C언어 개발 환경

   (1) GNU C 컴파일러 : gcc, C 컴파일러
   (2) GNU 디버거 : gcc와 함께 사용하는 디버거는 보통 gdb이다.
      유닉스의 디버거에 그래픽 인터페이스를 씌워 디버깅하기 쉽게 나온 도구가 DDD(Data Display Debugger), gdb와 조합해서 사용 가능
   (3) 바이너리 유틸리티(binutils) : C 프로그래밍과 시스템 개발에 필요한 기본 명령을 모아놓은 패키지
      - 어셈블러 as, 프로파일러 gprof, 링커 ld, 오브젝트 파일 처리 objcopy/objdump, 문자열 추출 strings, 심볼 삭제 strip

728x90
반응형