////
Search
💿

OS

CPU의 구조

1.
Control Unit:
a.
프로세서의 조작을 지시
2.
ALU(Arithmetic Logic Unit)
a.
계산
3.
레지스터
a.
기억
b.
용량이 적고 빠르다

레지스터

1.
PC(Program Counter): 다음에 실행될 명령어의 주소를 가지고 있어 실행할 기계어 코드의 위치를 지정한다. 때문에 명령어 포인터라고도 한다.(현재 실행 중인 소스 코드 라인이라고 생각하면 쉽다.)
2.
명령어 레지스터: 현재 실행중인 명령어
3.
메모리 주소 레지스터: 타겟
4.
메모리 데이터 레지스터: 타겟에서 가져온 데이터 혹은, 타겟에 넣을 데이터
5.
어큐뮬레이터: 계산값

word

→ 컴퓨터(CPU)가 한 번에 처리 할 수 있는 정보의 양, 레지스터의 단위
16bit CPU → 16bit가 1word
32bit CPU → 32bit가 1word
64bit CPU → 64bit가 1word
32bit OS에서는 RAM을 4G 초과로 쓸 수 없다.
→ 주소 표현이 2322^{32}(4G)까지만 표현이 가능하므로
OS가 메모리 관리
OS에서 메모리 가상화를 통해 프로세스에 메모리 할당해줌
프로세스 메모리 구조(코드, 데이터, 스택, 힙)
→ RAM이 4GB일 때 4GB 이상이 잡힌다. 하드디스크를 가상 RAM처럼 쓰기 때문

OS 가상메모리

메모리가 꽉 차서 시스템이 다운되는 것을 방지하기 위해서 하드디스크의 일부분을 RAM으로 사용
윈도우: 가상 메모리
리눅스: 스왑

프로세스 가상메모리

논리적인 RAM을 사용(논리적인 주소를 가지고 있다가 실제 RAM에서 쓰일 때만 물리적 주소로 변환)

유저모드 커널모드

컴파일 타임, 런타임

프로그램 작성 ⇒ 컴파일러 컴파일(컴파일 타임) ⇒ 실행 파일 ⇒ OS에 의해 실행(런타임)

지역변수를 Stack으로 쌓는 이유

빈 공간 없이 사용하려고(앞으로 얼마나 쓸지 모르므로 최대한 메모리를 아끼기 위해서)
Stack영역은 높은 주소에서 낮은 주소로 Heap영역은 낮은 주소에서 높은 주소로 할당된다.
그래서 Stack이 Heap영역을 침범하면 StackOverflow, Heap이 Stack영역을 침범하면 HeapOverflow라고 한다.
코드, 데이터 영역도 컴파일 타임에 크기 결정되고 프로그램 종료 시까지 메모리에 존재
코드 영역은 return 10을 한다거나 하는 변수 이외 값들이 저장된다.

padding bit

64의 배수가 단편화를 줄이기 좋아서 C언어 컴파일러에서 char에는 추가 bit가 붙는 경우가 있다.