SW = 응용 프로그램 + OS(커널 + 시스템 프로그램)

IRISH·2025년 1월 4일

Infra

목록 보기
2/2
post-thumbnail

최근에 리눅스/유닉스를 활용해서 프로젝트를 구동 및 제어하고, ssh를 통해 다른 pc에 접속하고 등 여러 작업을 진행하고 있다.

이 중 하나로, 프로젝트의 기존 파일을 새로 수정한 것으로 대체하기 위해서 watchdog라는 것을 종료시켰다가, 새로운 파일을 올리면 다시 watchdog를 실행해야 하는 부분이 있었다.

이 watchdog를 공부하다 보니 커널에 대한 부분이 나와서, 커널 공부를 하다 보니, OS에 대한 내용이, 더 나아가 SW에 대한 내용이 나왔다.

컴공 출신이기에 대략적으로 시험 때문이라도 SW / 응용 프로그램 / OS / 커널 / 시스템 프로그램에 대한 것을 벼락치기로 공부했었지만... 돌이켜 보면 내 머릿속에 남은 것이 없었던 것 같다.

그래서 이 참에 SW에 대해서 공부해 내 머릿속에 각인시키지는 마음가짐으로 공부해서, 정리한 것을 이 포스팅에 올려본다.

이 글을 읽는 분들도 SW / 응용 프로그램 / OS / 커널 / 시스템 프로그램을 공부하다 보면 서로 연관이 있다는 것을 느낄 텐데, 이 포스팅이 여러분의 가려운 곳을 긁어주기를 희망한다.

SW 핵심 요약

SW = 응용 프로그램 + OS(커널 + 시스템 프로그램)

  • 응용 프로그램
    • 응용 프로그램 = 번거롭게 운영체제의 명령어를 통해 얻을 수 있는 결과물의 불편함을 해소하고자 만들어진 것
    • (한글, 엑셀, 파워포인트, 인터넷 익스플로러, 메모장 등)
  • 시스템 프로그램
    • 시스템 프로그램 = (하드웨어 동작 지시 / 제어 / 관리)하는 프로그램
    • (컴파일러 / 어셈블러 / 링커 / 로더 등)
  • 커널
    • 커널 = 하드웨어와 응용 프로그램 사이에서 인터페이스를 제공 + 컴퓨터 자원들을 관리하는 역할

보다시피, OS는 커널과 시스템 프로그램의 결합이다.
즉, 컴퓨터 자원을 관리하는 "커널"과 하드웨어를 움직이게(?)하는 "시스템 프로그램"이 합쳐진 것이 바로 OS이다.

그리고 개발자라면 유닉스/리눅스를 통해서 또는 프로그래밍을 통해서 뭐 메모장을 생성하기도 하고 계산기 프로그램을 개발하기도 하고 하는데, 실질적으로는 이러한 개발 결과물을 유닉스/리눅스의 명령어를 통해서도 구현 가능하다.

하지만, 어떤가? 어떤 기능을 사용하고자 할 때마다 명령어를 한 줄 한 줄 치면, 뭔가 개발자 smell이 나는 것 같아 기부니가 좋을 때도 있지만, 그것도 한두 번이었을 것이다. 왜냐??? 귀찮고 짜증나거든.... 그리고 모든 명령어를 다 알 수도 없는 노릇이고...

이러한 귀찮음을 해결하고자 만들어진게 응용 프로그램이고, 대표적인 응용 프로그램이 메모장 / 계산기가 있다.

응용 프로그램 / 시스템 프로그램 / 커널에 대해서 아래에서 좀 더 자세히 보도록 하자.

응용 프로그램

  • 한글, 엑셀, 파워포인트, 인터넷 익스플로러, 메모장 등의 프로그램을 의미
  • 운영체제만으로도 원하는 결과물을 얻을 수 있지만…
    • 운영체제만 활용하면 원하는 작업을 할 때마다 명령어를 사용자가 일일이 쳐야 함
  • 이 귀찮음을 없애고자 만들어진 것 = 응용 프로그램

시스템 프로그램 (컴파일러 / 어셈블러 / 링커 / 로더 등)

시스템 프로그램 개념

핵심 개념 = 시스템 프로그램은 (하드웨어 동작 지시 / 제어 / 관리)하는 프로그램

  • 응용프로그램과 사용자를 위해 컴퓨터 시스템 자체를 운영, 제어하는 프로그램
  • 컴퓨터를 효율적으로 운영할 수 있도록 하드웨어의 동작을 지시하고 제어, 관리하는 다양한 기능을 갖도록 하는 프로그램

시스템 프로그램 수행 과정

원시 프로그램 번역 -> 다른 프로그램과 연결 -> 실행 명령어들을 메모리에 적재-> 실행

시스템 프로그램 종류

  • 컴파일러(compiler) : 원시프로그램(source program)=> 목적프로그램(object program)으로 번역
  • 어셈블러(Assembler) : 어셈블리어를 0과 1로 구성된 기계어코드로 변환
  • 매크로 프로세서(macro processor) : 반복적으로 수행되는 부분을 모아 기호화된 이름으로 묶어서 사용하는것을 모듈로 만든것
  • 링커(linker) : 서로 독립적으로 작성되고 번역된 모듈간에 연관을 맺어주는 작업을 하는 프로그램
  • 로더(loader): 기계명령어와 자료(실행가능프로그램)들을 기억장치에 배치시키는 일을 수행하는 프로그램

로더의 기능 및 순서

  1. 주기억장치 할당(allocation) : 주기억장치 내의 공간을 확보
  2. 연결(linking) : 여러 목적프로그램 또는 라이브러리 루틴 과의 링크작업
  3. 재배치(relocation) : 실제 주기억 장소에 맞추어 재배치
  4. 적재(loading) : 실제로 주기억 장소에 적재

커널

커널 개념 및 특징

→ 커널 개념

  • 운영체제 중 항상 메모리에 올라가 있는 운영체제의 핵심 부분
  • 하드웨어와 응용 프로그램 사이에서 인터페이스를 제공하는 역할
    • 하드웨어
      • 중앙 처리 장치(CPU)
      • 기억 장치
        • 주기억 장치 / 보조기억장치
      • 입출력 장치
  • 컴퓨터 자원들을 관리하는 역할
    • 여기서 말하는 컴퓨터 자원이 뭘까? ⇒ 그것은 밑에 나와 있음!

→ 커널의 특징

  • 커널은 항상 컴퓨터 자원들을 바라보고 있음 ⇒ 사용자와의 상호작용 지원 X
  • 사용자와의 상호작용을 하려면? ⇒ 쉘(Shell)이라는 명령어 해석기 등을 활용

커널의 자원 관리

커널의 가장 큰 목표 = 컴퓨터의 물리적(하드웨어) 자원과 추상화 자원을 관리 하는 것

  • 추상화 = 물리적으로 하나뿐인 하드웨어를 여러 사용자들이 번갈아 사용할 수 있도록 마치 여러개처럼 보이게 하는 기술 → 커널의 관리 정도에 따라, 각 사용자들을 하나의 하드웨어를 독점하는 것처럼 느낄 수 있음

→ 커널의 작업

  • Task(Process) Management : 물리적 자원인 CPU를 추상적 자원인 Task로 제공
  • Memory Management : 물리적 자원인 메모리를 추상적 자원인 Page 또는 Segement로 제공
  • File System : 물리적 자원인 디스크를 추상적 자원인 File로 제공
  • Network Managment : 물리적 자원인 네트워크 장치를 추상적 자원인 Socket으로 제공
  • Device Driver Management : 각종 외부 장치에 대한 접근
  • Interrupt Handling : 인터럽트 핸들러
  • I/O Communication : 입출력 통신 관리

인터페이스로써의 커널

커널은 다양한 자원을 관리 ⇒ for 사용자가 물리적인 하드웨어에 접근하고 사용할 수 있도록 매개하기 위해서

  • 커널 = 사용자가 System Call을 통해 컴퓨터 자원을 사용할 수 있게 해주는 자원 관리자
  • 커널 핵심 기능
    • Process Management
    • Memory Management
    • Device Management

커널과 운영체제

커널 + 애플리케이션, 유틸리티 = 운영체제

→ 커널은 운영체제의 핵심 구성요소이고, 이러한 커널에 사용자 애플리케이션과 유틸리티가 추가되면 운영체제가 된다.

→ 리눅스 자체는 (File System Utilites, Windowing Systems, Graphical System, Text Editors, Compilers) 등과 같은 사용자 애플리케이션을 포함 X && 핵심기능만 포함 O ⇒ 커널

  • 리눅스 자체 = 커널
  • Ubuntu, CentOS
    • 리눅스를 기반으로 운영체제를 제공하는 회사들은 기본 리눅스 커널에 다양한 확장 애플리케이션을 추가하여 운영체제를 제공

커널의 유형

→ 모놀리식 커널(Monolithic Kernel), 마이크로 커널(MicroKernel)

  • 이거에 대한 자세한 거는 더 공부 필요 ⇒ 레퍼런스 블로그 내용 다시 보기!

Reference

→ 시스템 프로그램이란

→ 운영체제와 응용프로그램이란?

→ [OS] 커널(Kernel)이란

느낀점

개념적으로 공부한 것이고, 아직 내가 시스템 프로그램 / 커널 등을 직접 제어해보지는 못했다.
하지만, 이번 계기를 통해 SW = 응용 프로그램 + OS(시스템 프로그램 + 커널) 이라는 것을 확실히 내 머릿속에 각인시킬 수 있었다.

뭐 누구는 커널을 통해서 간지가 철철 넘치는 프로젝트를 구상하고 실현하기도 하는데... 나도 그런 사람이 될 수 있으면 좋겠당... (실제로 이룰 것이다.)

내가 공부한 것이, 이 글을 읽는 모든 분들에게 도움이 되길 빈다. 안뇽!

profile
#Software Engineer #IRISH

0개의 댓글