Process 과 Program의 모든것

이동윤·2024년 11월 15일
0

Program과 Process란 무엇인가?


우리는 살면서 Program이라는 단어를 수도 없이 들어봤다. 그렇다면 이 프로그램의 정확한 정의는 무엇일까?
Program 이란 소스 코드를 바이너리 코드로 컴파일해서 생성한 일련의 기계어 명령어를 의미한다

로마에가면 로마법을 따르듯이 CPU에 가면 기계어로 번역을해야한다는 뜻!

그렇다면 이 프로그램을 실행시키기 위해선 어떠한 과정들을 거칠까?
가장 먼저 기계어 명령어들을 메모리에 로딩한 후에 CPU가 명령어를 하나씩 실행하는 과정을 거친다
그리고 이렇게 실행 중인 프로그램을 바로 Process라고 한다


그렇다면 UNIX 환경에서의 프로세스와 프로그램은 어떤 의미를 가질까?

  • 실행 프로그램(Executable program) : 기계어 명령어 및 데이터 목록

  • 프로세스(process) : 프로그램이 실행되는 메모리 공간 및 설정

  • ps (process status) :현재 실행 중인 프로세스의 상태를 출력하는 명령어


ps 명령어

ps 명령어는 현재 실행 중인 프로세스의 상태를 출력하는 리눅스 및 유닉스 계열 시스템의 명령어이다.
주로 시스템에서 어떤 프로세스가 실행 중인지, 그들의 PID, CPU 및 메모리 사용량 등을 확인할 때 사용된다.

  • PID (process ID)
    – 프로세스마다 고유한 번호를 가짐

  • TTY
    – teletype, terminal type
    – 사용자가 로그인한 콘솔이나 터미널 이름

  • TIME
    –프로세스가 실행된 CPU 시간

  • CMD
    –프로세스를 실행한 명령어 이름

그리고 이러한 ps 명령어에는 다양한 플래그들이 존재한다!


ps -a

  • -a 옵션: all processes

다른 사용자 및 다른 터미널에서 실행되는 프로세스도 출력
– shell(bash 등)은 출력되지 않음


ps –la

  • -l 옵션: long format

  • F : process flag(no longer used)

  • S : 각 프로세스의 상태
    S : sleeping
    R : running

  • UID : User id

  • PID : Process id

  • PPID : Parent process id• PRI: priority
    –숫자가 높은 수록 우선 순위가 낮음

  • NI : niceness level
    – 19(nicest)~ -20(not nice to other)
    –높은 nice 번호를 가진 프로세스는 다른 프로세스에서 CPU 시간을 양보

  • SZ : process memory size(KB)


ps –fa

  • -f: full-format listing (UID 번호 대신 사용자 이름이 표시)

  • CMD
    – complete command line


Computer Memory and Computer Program

1. UNIX 시스템의 메모리 구조

유닉스 시스템의 메모리는 크게 커널 공간(kernel space)사용자 공간(user space)으로 나뉜다.

  • 커널 공간 (Kernel Space):
    시스템의 커널(운영체제의 핵심 코드)이 실행되는 공간입니다.
    프로세스의 생성과 관리, 메모리 할당, 파일 시스템 제어 등 중요한 작업을 수행합니다.
    사용자 프로그램은 직접 접근할 수 없으며, 시스템 호출(system call)을 통해서만 커널 공간의 기능을 사용할 수 있습니다.

  • 사용자 공간 (User Space):
    사용자가 실행하는 모든 응용 프로그램이 실행되는 공간입니다.
    각각의 응용 프로그램은 독립적인 프로세스로 실행되며, 이 프로세스들은 서로 격리되어 있어서 다른 프로세스의 메모리에 직접 접근할 수 없습니다.
    사용자 프로그램은 커널 공간의 자원을 사용하려면 시스템 호출을 통해 간접적으로 접근합니다.

2. 프로세스 (Processes)

  • 작은 단위의 page로 나뉨
    – 디스크 파일이 디스크 블록으로 나뉘는 것과 동일
  • allocation list를 관리
    – 프로세스가 저장된 메모리 page를 관리
  • 프로세스 생성
    – 디스크에 파일을 생성하는 것과 유사

3. 커널의 프로세스 생성

  • 디스크 파일 생성과 유사
  • kernel 동작
    – 프로그램의 기계어 코드와 데이터를 보관할 사용 가능한 memory page를 검색
    – 프로세스의 메모리 할당 정보와 속성들을 저장하기 위한 data structure를 설정

The shell

  • Shell
    프로세스 관리프로그램을 실행하는 프로그램이자 사용자가 컴퓨터와 상호작용할 수 있는 명령어 인터프리터입니다. 사용자가 입력한 명령을 해석하고 실행하는 역할을 하며, 운영체제의 커널(Kernel)과 사용자 사이의 인터페이스 역할을 합니다

  • Shell의 세 가지 주요 기능
    • (a) 프로그램 실행
    • (b) 입력과 출력 관리
    • (c) 프로그래밍이 가능(쉘 프로그래밍)


프로그램 실행

• Shell은 프로그램을 메모리에 로드하고 실행
• Shell: program launche

입력과 출력 관리

  • 입출력 기호(redirection) 사용: >, <, |
    – shell에 프로세스의 입력 및 출력을 디스크 파일이나 다른 프로세스에 연결하도록 지시

쉘 프로그래밍

• Shell은 변수와 흐름 제어(if, while 등)를 갖춘 프로그래밍 언어임


쉘 동작 과정

Shell이 프로그램을 동작시키는 과정

• A: 사용자가 ‘a.out’을 입력
• B: shell은 프로그램을 실행하기 위해 새로운 프로세스 생성
• C: shell은 디스크에서 프로세스로 프로그램을 load
• D: 프로그램은 완료될 때까지 프로세스 내에서 실행

0개의 댓글