본문 바로가기
Computer Science

시스템 프로그래밍 - 리눅스

by 개발자 데이빗 2022. 1. 3.

리눅스

  • 서버, 클라우딩 컴퓨팅에 많이 사용되는 운영체제
  • 소프트웨어의 대부 UNIX 계열 운영체제
  • plain 하게 프로그래밍이 가능
    • C언어 표준에 맞춰 프로그래밍이 가능하다. 
    • ANSI C - C언어 표준

리눅스의 역사

리눅스의 시작

  • 리누스 토발즈 (Linus Torvalds)가 개발
  • 대학에 있는 UNIX 컴퓨터를 집에서 쓰고 싶다는 생각을 가지고 LINUX 운영체제 개발
  • 다중 사용자, 다중 작업(시분할 시스템, 멀티 태스킹)을 지원하는 유닉스와 유사한 운영체제

 

GNU (Gnu is Not Unix) 프로젝트

  • 유닉스 운영체제를 여러 회사에서 각자 개발하고 소스를 공유하지 않음
  • 리차드 스톨만이 초기 컴퓨터 개발 공동체의 상호협력적 문화로 돌아갈 것을 주장하며 1985년도에 GNU 선언문 발표
  • GNU 프로젝트를 지원하기 위해 자유 소프트웨어 재단(FSF) 설립과 GNU 공개 라이선스(GPS)라는 규약을 제공

GPL라이선스

  • GPL 프로그램은 어떤 목적이든, 어떤 형태든 사용할 수 있지만 사용하거나 변경된 프로그램을 다시 배포하는 경우 동일한 GPL 라이선스로 공개 해야 함
  • 소스 오픈을 장려하기 위함

GNU 프로젝트와 GNU Hurd

  • 운영체제 커널 개발 시도 - GNU Hurd
  • 운영체제에 필요한 라이브러리, 컴파일러, 에디터, 쉘 개발 

 

GNU 프로젝트와 리눅스

  • GNU Hurd 개발 지연 (OS가 개발되지 않음)
  • 리누스 토발즈가 리눅스 커널 소스 오픈
  • 리누스 토발즈에게 GPL 라이선스 규약 제안, 리누스 토발즈가 수락
  • GNU 프로젝트 산출물과 리눅스 커널이 통합 개발

리눅스와 파일

  • 모든것은 파일이라는 철학을 따른다.
    • 모든 인터렉션은 파일을 읽고, 쓰는 것처럼 이루어져 있다.
    • 마우스, 키보드와 같은 모든 디바이스 관련된 기술도 파일과 같이 다루어진다.
  • 파일 네임스페이스
    • 전역 네임스페이스를 제공
      • /media/floofy/ (루트 디렉토리의 media 디렉토리의 플로피디스크 파일)
  • 파일은 inode 고유값과 자료구조에 의해 주요 정보관리

리눅스와 프로세스

  • 리눅스 실행 파일 포멧 - ELF (Executable and Linkable Format)
    • 콜스택, 코드(텍스트), 데이터 및 BSS 섹션 등
  • 다양한 시스템 리소스와 관련
    • 시스템콜 호출을 통해 리소스 처리 가능토록 구성
      • 타이머, 시그널, 파일, 네트워크, 디바이스, IPC기법
  • 가상 메모리 지원
  • 각 프로세스는 pid(프로세스ID) 고유값으로 구분한다.
  • init 프로세스(첫번째 프로세스)를 기반으로 fork() 시스템콜을 사용해서 신규 프로세스가 생성된다.

리눅스와 권한

  • 운영체제는 사용자/리소스 권한을 관리
  • 리눅스는 사용자/그룹 권한을 관리
  • root는 슈퍼 관리자
  • 파일마다 소유자, 소유자 그룹, 모든 사용자에 대해 읽고, 쓰고, 실행하는 권한을 관리
    • 접근 권한 정보는 inode의 자료구조에 저장

정리

  • 리눅스는 모든 리소스를 파일로 관리한다 (inode 기반)
  • 리눅스의 프로세스
  • ELF 포멧
  • 시스템콜 기반 리소스 처리 가능토록 구성
    • 타이머, 시그널, 파일, 네트워크 등등
  • 가상 메모리 사용
  • pid 기반 구분
  • init 프로세스 기반 fork() 사용해서, 프로세스가 생성
  • 리눅스 사용자 (로그인 사용자/그룹) 기반으로 관리
  • 리눅스 리소스(파일) 권한(소유자, 소유자 그룹, 모든 사용자에 대한 읽고, 쓰고, 실행 하는 권한 설정) 관리

'Computer Science' 카테고리의 다른 글

시스템 프로그래밍 핵심 기술  (0) 2022.01.09
시스템 프로그래밍 - 쉘 사용법  (0) 2022.01.06
파일 시스템  (0) 2022.01.03
가상 메모리  (0) 2022.01.01
스레드 (Thread)  (0) 2021.12.29

댓글