프로세스 정보(리눅스) - 1
본 내용은 한빛 아카데미의 시스템 프로그래밍을 참고한 내용입니다!
1. 프로세스란?
프로세스란 간단히 말해서 현재 실행 중인 프로그램을 의미해요. 가끔씩 컴퓨터가 먹통일 때, 강제종료를 하기 위해 작업관리자에 들어가 보신 적이 다들 있으실 거예요. 거기서 우리가 '프로그램 끝내기'를 하는 것이 바로 프로세스입니다.
(참고로, 프로세스와 프로그램을 같은 의미로 말하기도 하는데, 엄밀히 말해 서로 다른 개념이니 주의해 주세요!)
리눅스에서는 이러한 프로세스가 동시에 실행되기도 하는데요. 물론 이 프로세스들이 늘 실행 중인 것은 아니고,
실행(running), 수면(sleeping) 등의 상태를 왔다 갔다 해요.
2. 구조
프로세스의 구조는 어떻게 되어있을까요? 먼저 아래 다이어그램을 보시면,
뭔가 많네요..
이제 이 영역들에 대해 간단히 설명드릴게요. 프로세스의 영역은 크게 고정 영역과 가변 영역으로 나눌 수 있어요.
2.1. 고정 영역
2.1.1. 텍스트 영역
먼저 텍스트 영역입니다. 이 공간은 실행 코드 즉, 우리가 실제로 짠 코드의 텍스트들을 저장하는 공간이에요. 이 영역과 데이터 영역은 고정 영역에 포함되어 있는데, 그 이유는 프로그램을 실행하면 프로세스가 생성되는데, 우리가 짠 코드가 그동안 바뀌면 안 되잖아요? 그래서 고정 영역에 속해있다고 볼 수 있어요.
2.1.2. 데이터 영역
다음으로 또 다른 고정 영역인 데이터 영역입니다. 여기서는 프로그램에서 정의한 전역 변수가 저장돼요. 전역 변수란, 지역 변수와 상반되는 변수로 함수 외부에서 정의되어 그 범위가 프로그램 전체에 해당하는 변수예요. 즉, 프로그램이 종료될 때까지 유지되어야 하기 때문에, 고정 영역에 속해있어요.
2.2. 가변 영역
2.2.1. 힙 영역
가변 영역 중 힙 영역은 메모리와 관련 있는 영역이에요. 프로그램이 실행되는 동안 동적으로 메모리를 요청할 때가 있는데, 그때 할당되는 영역이 바로 힙 영역이에요.
2.2.2. 스택 영역
아까 전역 변수가 데이터 영역에 저장된다고 했죠? 또 다른 변수인 지역 변수가 저장되는 곳이 바로 스택 영역이에요. 지역 변수는 말 그대로 그 지역(local)에서만 사용되는 변수이기 때문에, 이런 가변 영역에 저장이 된다고 보시면 돼요.
2.2.3. 빈 공간
스택 영역과 힙 사이에 빈 공간이 있는데, 이러한 빈 공간이 있는 이유는 쉽게 말해 메모리 사용을 유연하게 해 주기 때문이에요. 스택과 힙은 가변 영역이라 크기가 변하기도 하는데, 이때 스택은 아래쪽으로 성장하고 힙은 위쪽으로 성장하기 때문에 빈 공간이 없다면 이 둘은 결국 충돌해서 stack overflow나 heap overflow를 일으키게 돼요. 이러한 사고를 방지하기 위해 빈 공간이 사이에 있는 것입니다.
3. 프로세스 목록 보기
3.1. ps 명령어
ps 명령을 아무 옵션도 없이 사용할 때는, 현재 터미널에서 실행한 프로세스만 출력돼요.
그리고 여기에 -ef 옵션을 붙여주면, 시스템에서 동작하고 있는 전체 프로세스를 볼 수 있어요.
4. 시스템 정보 보기
4.1. top 명령어
ps명령 외에도 top 명령어가 있는데요. 이 명령을 실행하면, 프로세스 목록뿐만 아니라 시스템 정보를 주기적으로 확인할 수 있어요. 이때 주기의 기본값은 3초이고 top명령을 실행하는 동안, d를 누르거나 -d 옵션으로 주기를 변경할 수 있습니다.
4.2. sysinfo()
먼저 이 함수를 사용할 때 주의할 점이 있는데, 솔라리스 환경에서는 sysinfo()가 리눅스, 우분투 환경과는 다른 용도로 사용되니 주의해 주세요. 이 함수는 top 명령어로 확인할 수 있는 정보중 메모리와 스왑에 관련된 정보를 직접 검색할 때 사용돼요.
sysinfo()는 sysinfo 구조체의 주소를 인자로 받아, 검색 결과를 구조체에 저장 후 리턴해 줍니다.