운영체제 공부/ 리눅스 구조

Yoo_j·2025년 3월 13일


중구난방으로 공부 시작..

실습과 그림으로 배우는 리눅스 구조라는 책을 한권 공부 해보려고 한다.

근데 초장부터 막힌다...

암튼 막히는 부분을 이야기 해보자면,

3장 프로세스 관리 챕터에서 아래와 같은 코드가 주어지는데,

https://github.com/satoru-takeuchi/linux-in-practice/blob/master/03-process-management/fork.c

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <err.h>

static void child()
{
	printf("I'm child! my pid is %d.\n", getpid());
	exit(EXIT_SUCCESS);
}

static void parent(pid_t pid_c)
{
	printf("I'm parent! my pid is %d and the pid of my child is %d.\n",
	       getpid(), pid_c);
	exit(EXIT_SUCCESS);
}

int main(void)
{
	pid_t ret;
	ret = fork();
	if (ret == -1)
		err(EXIT_FAILURE, "fork() failed");
	if (ret == 0) {
		// child process came here because fork() returns 0 for child process
		child();
	} else {
		// parent process came here because fork() returns the pid of newly created child process (> 1)
		parent(ret);
	}
	// shouldn't reach here
	err(EXIT_FAILURE, "shouldn't reach here");
}입력하세요

fork()함수의 실행 프로세스에 대한 부분이다.
여기서 pid_t가 뭔지 몰라서 한참 생각 및 서치 해봤는데, 자료형이다..
프로세스 id 를 나타내는 자료형이라고 하는데, 이것 조차도 모르다니.. 반성해라 나 자신,, 다시 처음으로 돌아가서 공부해야할것같다..

그리고 아래 다른 사람이 작성한 글을 가져왔는데 이 자료형을 쓰는 이유라고 한다. (무려 2010년에 작성되어 있는..)_

ssize_t, size_t, pid_t 는 고전적인(primitive) 자료형이라 한다.
일반적으로 헤더에 선언되어 있는데, 사실 C의 typedef 선언을 통해서 정의되어 있다.

즉 새롭게 등장한 것이 아니라, 잘 알고 있는 int, float, long과 같은 기본 자료형을 가지고,
이름만 바꾸어 정의해 놓은 것이다. 이러한 자료형들은 꽤 오래 전부터 존재하고 있엇다.

그렇다면 도대체 왜 이러한 것을 정의해 놓고 사용하는 것일까??
int, short, float 라고 하면 사용하기 편할 텐데..

지금은 int가 32비트라고 한다. 보편적으로 사용되는 운영체제와 컴퓨터가 32비트이기 때문이다.
과거 16비트 시설에는 int가 16비트였고 곧 64비트 시대가 도래 할 것이다.
즉, 시스템에 따라서 자료형의 표현 방식이 틀려지므로 내가 구현한 프로그램을 다른 시스템에서
실행 시키기 위해서는 코드의 수정 자체가 불가피하다.

그러나 4바이트의 자료형이 필요한 곳에, 지금 처럼 헤더파일에 unsigned int를 size_t로 정의해
놓고 쓰게 되면, 나중에 시스템이 변경되어서 unsigned int가 더 이상 4바이트를 나타내지 않게
되었을 때, 4바이트를 나타내는 다른 적절한 자료형을 가지고 헤더파일에 선언되어 있는 size_t를
재정의해 주기만 하면 된다.

즉 소스 코드는 바꾸지 않고 컴파일만 다시 한번 하면 새로운 시스템에서 잘 돌아가게 된다는 것이다.

이것이 int, double, short, float과 같은 특정 자료형에 종속되지 않도록, 새로운 이름의 자료형을 정의해 주는 이유가 된다.

보통은 다음과 같은 형식으로 정의한다.

size_t : unsigned 형태의 변수 선언
ssize_t : signed 형태의 변수 선언
pid_t : Process ID를 표현하기 위해서 사용

[출처] ssize_t, size_t, pid_t 타입 개념잡기|작성자 몽키몽키

그렇다고 한다.. 너무 예전에 작성된 글이라 퍼오기도 뭐하지만, 일단은 공부하면서 모르는 개념 정립을 위해서 이렇게라도 남겨둔다.

profile
클라우드 연구하고 통신사 취업을 목표로 하고 있는 돌선생..

0개의 댓글