카카오 계정과 연동하여 게시글에 달린
댓글 알람, 소식등을 빠르게 받아보세요

가장 핫한 댓글은?

본문이 수정되지 않는 박제글입니다.

중졸입니다...

2025.11.03

0

175


리눅스 커널&운영체제 개론 (1)

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=8614 [복사]


리눅스 커널은 핀란드 헬싱키 대학에서 전산학을 전공하던 학생이었던
리누스 토발즈가 1991년 8월 26일 리눅스 0.0.1을 개발한 것으로 시작된다.
리눅스 커널은 모놀리식 커널이며 커널의 기능이 대부분 단일 메모리 공간에서 작업된다는 뜻이다.
이러한 커널 모듈을 작성하는 것을 모듈 프로그래밍이라고 한다.


[소프트웨어에 가까움]
애플리케이션

커널 (운영체제)

CPU Memory Devices
[하드웨어에 가까움]

애플리케이션단에서 하드웨어를 제어하기 위해서는
무언가 통신하며 제어하는 매체가 있어야 하는데 이것이 바로 커널이다.
커널은 운영체제, Operating System이라고 불리우며
OS라고 부르기도 한다.

보통 운영체제를 설치할 때 32비트와 64비트를 언급하는데
특히 CPU를 구입할 때 64비트라는 것이 무엇인지 알아보자.

x86? x64?

짧게 말하면, x86은 인텔 CPU 모델명 끝자리 “86”에서 온 말이다.
1978년 인텔이 8086(16비트)을 내놨고,
뒤이어 80186 → 80286 → 80386 → 80486처럼 세대가 이어졌다.
사람들끼리 이 계열을 묶어 “8×86” → x86이라 부르기 시작한 것이다.
486 다음 세대(사람들이 농담으로 “80586”이라 부르던 것)는
인텔이 숫자 대신 Pentium이란 상표를 쓰면서도 명칭은 계속 x86로 굳어졌다.
숫자는 바뀌었지만 명령어 집합(ISA) 호환이 이어졌기 때문에...
오늘날 용어를 맵핑하자면...

IA-32 = 32비트 x86
x86-64 / AMD64 = AMD가 확장한 64비트 x86(인텔은 Intel 64라고 부름)


즉, 모델명이 86으로 끝나던 인텔 8086 계열 CPU의
호환 ISA 전체를 가리키는 관습적 이름이 x86이다.
한마디로 말해서 x86은 86비트가 아니다.
32비트인데 86이 붙는 건 예전에 인텔에서 32비트 CPU를 출시할 때
80586이런 식으로 모델명을 붙였기 때문이다.



p.s. 예전에 학창시절 공부를 꼴지하던 애가 있었는데
그놈이 성인이 되어서 내 앞에서 x86을 보고 86비트라고 말한 적이 있었다.
64비트보다 86비트가 더 숫자가 높아서 성능이 좋다며 64비트 CPU를 사용하는
내 컴퓨터에 32비트(x86) 윈도우7을 설치한 전설이... -_-;;
백신을 깔아놨냐고 하니깐 나는 안 깐다고 하니깐
나보고 백신도 안 깔아놨냐며 너 바이러스 먹으면 어쩌냐느니 뭐라 하던데...
알약이 어쩌고 V3가 어쩌고 해서 우리집에 백신을 깔아놓고 간 전설이...
올리디버거로 크랙미 같은거 문제풀 때 백신이 자꾸 걸려가지고
백신을 설치하지 않은 거였는데...;;

리눅스에서 한번 필자의 자료형 크기를 확인해보자.


┌─[ka0r1@parrot]─[~]
└──╼ $cat test.c
#include <stdio.h>
#include <inttypes.h>

int main(void)
{
printf("sizeof(void*)=%zu\n", sizeof(void*));
printf("sizeof(int)=%zu, long=%zu, size_t=%zu\n",
sizeof(int), sizeof(long), sizeof(size_t));

return 0;
}
┌─[ka0r1@parrot]─[~]
└──╼ $./test
sizeof(void*)=8
sizeof(int)=4, long=8, size_t=8
┌─[ka0r1@parrot]─[~]
└──╼ $





32비트의 물리/가상 주소...
32비트 커널도 PAE로 물리 메모리 4GB 넘게 다룰 수 있지만
프로세스 가상 주소 공간은 여전히 4GB 한계가 일반적이다.
64비트는 훨씬 큰 가상 주소 공간(보통 수십 테라)으로 대형 힙/매핑이 쉬워짐.

자세하게 따지자면
이진수 십진수
0 0
1 1
10 2
11 3
100 4
101 5
110 6
111 7
1000 8



디지털이 0과 1로 이루어진다고 말하는데 이게 정확히 무슨 뜻일까?
이것은 0은 거짓(존재하지 않음), 1은 참(존재)라는 것이다.
이 존재란 것은?
이진수 110은? 메모리상에서 전기가 있다, 전기가 있다, 전기가 없다
이런식으로 저장이 되는 것이다.


┌─[ka0r1@parrot]─[~]
└──╼ $gcc -O0 -g -fno-pie -no-pie test.c -o test
┌─[ka0r1@parrot]─[~]
└──╼ $objdump -D -M intel --show-raw-insn test
.
.
.
0000000000400358 <.note.gnu.build-id>:
400358: 04 00 add al,0x0
40035a: 00 00 add BYTE PTR [rax],al
40035c: 14 00 adc al,0x0
40035e: 00 00 add BYTE PTR [rax],al
400360: 03 00 add eax,DWORD PTR [rax]
400362: 00 00 add BYTE PTR [rax],al
400364: 47 rex.RXB
400365: 4e 55 rex.WRX push rbp
400367: 00 20 add BYTE PTR [rax],ah
400369: 64 94 fs xchg esp,eax
40036b: 70 2e jo 40039b <__abi_tag+0x1f>
40036d: 03 aa 33 fa 94 3b add ebp,DWORD PTR [rdx+0x3b94fa33]
400373: c6 (bad)
400374: be 1d 8c 21 ec mov esi,0xec218c1d
400379: 5a pop rdx
40037a: a2 .byte 0xa2
40037b: c8 .byte 0xc8
.
.
.

맨 위에...
04 00

04를 0100 0000이며
하드디스크라는 저장장치에 프로그램이 실행하면 주기억장치 메모리에
0100 0000(전기가 없다, 전기가 있다, 전기가 없다, 전기가 없다,
전기가 없다, 전기가 없다, 전기가 없다, 전기가 없다)

이런 식으로 메모리에 저장되며 프로그램이 시작되면 CPU가
메모리의 데이터(근본적으로 디지털 전기신호)를 레지스터 안에 로드해서
결국 중앙처리장치(CPU)가 처리하는 것이다.

카카오 계정과 연동하여 게시글에 달린
댓글 알람, 소식등을 빠르게 받아보세요

댓글 0개

댓글쓰기

게시판 목록으로 돌아가기

자유 게시판(아무개랩)에서 핫한 인기글은?

자유 게시판(아무개랩)에서 최근 댓글이 많이 달린 글

🔥 시선집중 핫한 인기글

최근 댓글이 많이 달린 글