프로세스와 프로그램의 차이는?
프로그램은 보조 기억장치에 존재하며 실행되기를 기다리는 명령어(코드)와 정적인 데이터의 묶음이다.
프로그램의 명령어와 정적 데이터가 메모리에 적재되면 프로세스가 된다.
즉, 메모리에 적재된 프로그램은 프로세스가 되고, 아니면 그저 프로그램이다.
 
어떻게 여러 개의 프로세스가 동시에 실행될까?
하나의 CPU(프로세서)는 한 순간에 하나의 프로세스만 실행할 수 있다.
다만, 운영체제가 엄청난 속도로 CPU가 실행할 프로세스를 교체하고 있기 때문에
동시에 실행하는 것처럼 보일 뿐이다.
 
프로세스는 어떻게 구성되어 있을까?
프로세스에 대한 정보는 PCB(Process Control Block)라는 자료구조에 저장된다.
PCB는 다음과 같은 정보를 담고 있다.
  • PID(Process IDentification)
    • 운영체제가 각 프로세스를 식별하기 위해 부여된 프로세스 식별번호이다.
  • 프로세스 상태
    • CPU는 프로세스를 빠르게 교체하면서 실행하기 때문에 실행 중인 프로세스, 대기 중인 프로세스 등 상태를 저장한다.
  • 프로그램 카운터
    • CPU가 다음으로 실행할 명령어를 가리키는 값이다.
    • CPU는 기계어를 한 단위씩 읽어서 처리한다.
    • 프로세스를 실행하기 위해 다음으로 실행할 기계어가 저장된 메모리 주소를 가리키는 값이다.
  • 스케줄링 우선순위
    • 운영체제에서 여러 개의 프로세스가 CPU에서 실행될 순서를 결정하는 것을 스케줄링이라고 한다.
    • 이 스케줄링에서 우선순위가 높으면 먼저 실행될 수 있는데, 이를 스케줄링 우선순위라고 한다.
  • 권한
    • 프로세스가 접근할 수 있는 자원을 결정하는 정보이다.
    • 프로세스마다 어디까지 접근할 수 있는지에 대한 권한이 필요하다.
  • 프로세스의 부모와 자식 프로세스
    • 최초 생성되는 init 프로세스를 제외한 모든 프로세스는 부모 프로세스를 복제해서 생성되고 이 계층관계는 트리를 형성한다.
    • 그래서 각 프로세스는 자식과 부모 프로세스에 대한 정보를 가지고 있다.
  • 프로세스의 데이터와 명령어가 있는 메모리 위치를 가리키는 포인터
    • 프로세스는 실행중인 프로그램이기 때문에 프로그램에 대한 정보를 가지고 있어야 한다.
    • 이 정보는 프로세스가 메모리에 가지는 자신만의 주소 공간에 저장된다.
    • PCB는 이 공간에 대한 포인터 값을 가진다.
  • 프로세스에 할당된 자원들을 가리키는 포인터
  • 실행문맥
    • 프로세스가 실행 상태에서 마지막으로 실행한 프로세서의 레지스터 내용을 담고 있다.
    • CPU에 의해 실행되는 프로세스는 운영체제에 의해 계속 교체된다.
    • 교체되었다가 다시 자신의 차례가 되었을 때 중단된 적 없이 연속적으로 실행된 것처럼 하기 위해 이 레지스터 정보를 보유한다.
 
프로세스가 접근할 수 있는 메모리 공간은?
PCB의 구성 요소 중 [프로세스의 데이터와 명령어가 있는 메모리]의 구성
이 주소 공간은 Text, Data, BSS, Heap, Stack 영역으로 구성된다.

스택 영역과 힙 영역 사이의 빈 공간은 컴파일 타임에 지역변수를 얼마나 사용할지 미리 계산할 수 없기 때문에 비워 두었으며,
런타임에 지역변수 선언 순서에 따라 스택 영역은 위쪽으로 주소값을 매기고 동적 할당될 때 힙 영역은 아래쪽으로 주소값을 매긴다.
 
프로세스는 어떻게 관리될까?
운영체제는 프로세스들의 실행 사이에 프로세스를 교체하고 재시작할 때 오류가 발생하지 않도록 관리해야 한다.
이를 위해 운영체제는 프로세스의 상태를 실행(running), 준비(ready), 블록(block) 상태로 분류하고 프로세스들을 상태전이(state transition)를 통해 체계적으로 관리한다.

  1. 사용자가 프로그램을 실행하면 프로세스가 생성되고 준비리스트에 추가된다.
  2. 프로세스는 프로세서(CPU)가 사용가능한 상태가 되면 CPU를 할당받는다. (디스패칭: 준비에서 실행상태로 전이, 디스패처가 수행)
  3. 프로세스는 실행상태에서 CPU를 이용해 연산한 후, CPU를 자발적으로 반납하고 작업이 끝나지 않았으면 다시 준비상태에 들어간다.
  4. 운영체제는 다시 준비리스트의 첫 번째에 있는 프로세스를 실행상태로 바꾸고 1~3을 반복한다.
  5. 프로세스를 다시 사용하기 전에 입출력이 완료대기를 기다려야 하는 상황이라면 완료될때까지 자신을 블록한다.
  6. 입출력이 완료되면 운영체제가 프로세스를 블록상태에서 준비상태로 다시 전이시킨다.
 
운영체제는 프로세스가 CPU를 자발적으로 반납하지 않고 독점하는 경우를 방지하기 위해 하드웨어적으로 인터럽팅 클록을 주기적으로 발생시켜
프로세스가 특정 시간 간격동안만 실행할 수 있도록 한다.
인터럽팅 클록이 발생되면 강제로 실행중인 프로세스의 CPU 제어권을 운영체제에 빼앗기고 프로세스는 준비상태로 전이된다.
많은 운영체제는 일시정지 상태를 추가로 정의한다.
이 상태 덕분에 편리하게 디버깅을 할 수 있다.

 

출처 : bowbowbow.tistory.com/16

 

[운영체제] 프로세스가 뭐지?

[운영체제] 프로세스가 뭐지? 목차 [운영체제] 프로세스가 뭐지? 개요 프로세스란 단어를 본적있나요? 프로세스란? 프로그램과 뭐가 다르지? 어떻게 여러 개의 프로세스가 동시에 실행될 수 있을

bowbowbow.tistory.com

 

반응형

1. 개요

1.1. 파티션이란?

PC의 기억장치 내부를 용도에 따라 구분한 디렉토리 구조이다.

드라이브는 sda, sdb, sdc ... sd<A>의 말미의 알파벳 변화가 일반적이고,

드라이브 내의 파티션은 sda1, sda2, sda3 ... sda<N>과 같이 번호가 할당되는 것이 일반적이다.

 

1.2. 왜 파티션을 구분하는가?

실제로 구분하지 않아도 시스템 자체는 가동하지만, 파티션을 구분하면 관리상의 편의성이 향상된다.

1.2.1. 시스템 영역과 데이터 영역의 분리

시스템 복구시, 시스템 영역만을 초기화하고 데이터를 보존할 수 있다.

일반적으로 /home 아래에 유저마다의 데이터를 보존한다.

또한, 유저가 스스로 설치한 어플리케이션은 /usr 아래에 보존하는 경우가 많다.

1.2.2. swap영역의 작성

메인 메모리가 부족할 때 그 대신 사용할 수 있는 영역이다.

고가의 메인 메모리를 저가의 기억매체로 보충할 수 있다.

메인 메모리 이상의 용량을 확보하기 위해 비교적 옛날부터 존재하는 구조이다.

 

1.3. 기본 파티션과 확장 파티션, 논리 파티션

1.3.1. 파티션의 종류

고전적인 BIOS(Basic Input Output System)와 MBR(Master Boot Record)에 의한 파티션 관리의 경우, 기본적으로 원시적이고 단순한 파티션은 기본 파티션이라 하며 4개까지 만들 수 있다.

실제로는 더욱 상세하게 파티션을 구분할 필요가 있는 경우 확장 파티션이라는 특수영역을 확보하여 그 안에 논리 파티션을 사용해 파티션을 상세하게 분할할 수 있다.

MBR의 관리방법의 경우 기본 파티션 4개 또는, 기본 파티션 3개와 확장 파티션 내의 논리 파티션을 구분하여 사용한다.

 

1.3.2. 분할의 한계

Linux는 SATA 접속의 기억매체인 경우 15개의 파티션이 한계이다.

기본 파티션 3개와 확장 파티션의 논리 파티션이 12개이다.

 

반면, 요즘 보급되는 UEFI(Unified Extensible Firmware Interface) + GPT(GUID Partition Table)로 관리하는 경우 일반적으로 128개의 기본 파티션을 설정할 수 있다.

 

2. Linux 디렉토리 구조

일반적으로 다음과 같은 구조이다.

2.1. /

가장 상위의 디렉토리이며 여기서 트리구조로 디렉토리를 생성한다.

2.2. /bin

현재 /usr/bin으로의 심볼릭 링크(바로가기)로 되어 있다. /usr/bin에는 실행 가능 바이너리 즉, 커맨드가 격납되어 있다.

2.3. /boot

커널 등이 격납되어 있다.

2.4. /dev

디바이스를 제어하기 위한 디바이스 파일군이 관리되고 있다.

2.5. /etc

주로 설정파일이 설치된다.

2.6. /home

일반 유저의 데이터는 여기에 보존된다.

2.7. /lib

/usr/lib으로의 심볼릭 링크이다.

2.8. /lib64

/usr/lib64으로의 심볼릭 링크이다. 64Bit 바이너리에 대한 라이브러리이다.

2.9. /media

USB 등의 Removal Media가 마운트된다.

2.10. /mnt

현재 media 디렉토리가 역할을 대신하는 경우가 많지만, 수동 마운트시, 이 곳에 외부기억매체를 마운트할 때가 많다.

2.11. /proc

현재 시스템의 정보로서 CPU나 메모리의 내부 정보가 파일로 설치된다.

2.12. /root

root 유저 전용 디렉토리

2.13. /run

기동하고 있는 프로세스 ID 정보가 설치된다.

2.14. /sbin

/usr/sbin으로의 심볼릭 링크이다. 시스템의 근간을 이루는 기초 커맨드의 바이너리가 격납되어 있다.

2.15. /srv

FTP나 HTTP 등의 전용 디렉토리, 어디까지나 기준적인 것이며 절대적이지 않다.

2.16. /sys

드라이버 관련 프로세스에 관한 디렉토리이다.

2.17. /tmp

일시 데이터 보존용 디렉토리이다.

2.18. /usr

시스템의 라이브러리나 실행 파일 등이 격납되어 있다.

2.19. /var

대체로 로그 등이 설치된다.

 

출처 : eng-entrance.com/linux-partition

 

Linuxのパーティションとは?とパーティションの区切り方を詳細解説

パーティションとはコンピュータの記憶領域に作ることができる「しきり」のことだ。このページではパーティションについての説明と、Linuxではどのような分け方がいいのかをまとめてご

eng-entrance.com

 

반응형

'■ 운영체제 > 리눅스' 카테고리의 다른 글

fstab이란?  (0) 2020.12.03
USB-HDD 접속시 자동 마운트 방법  (0) 2020.12.03

+ Recent posts