ꕥ
4주차에는 GCC 사용을 위한 Ubuntu 개발 환경 설정 후, RBTree 개념 확인 및 구현을 진행했습니다~
CSAP 책과 개인적으로 공부한 내용을 정리해 봤어요!
ꕥ
- Storage Class Specifiers 종류
- auto : 함수 내에서 지역 변수를 선언할 때 기본적으로 적용되는 저장 클래스 지정자
- static : 변수나 함수의 범위를 선언된 파일 내로 제한
- extern : 여러 개의 C 소스 파일을 함께 컴파일 했을 경우, 변수나 함수를 다른 파일에서도 접근 가능
- typedef : 새로운 데이터 형식을 정의할 때 사용되는 저장 클래스 지정자
- C의 기본적인 구조체
- enum : 지정된 정수 상수의 집합
- 요소를 그룹화
- 이해하기 쉬운 이름을 제공하여 코드의 가독성을 향상
- 자체로는 데이터를 저장 불가
- 상수에 값 미할당 시, 첫 번째 상수는 0으로 설정되고, 이후의 상수는 이전 상수의 값에서 1씩 증가하는 값이 자동으로 할당
enum Day {SUN, MON, TUE, WED, THU, FRI, SAT};
- array : 동일한 데이터 타입의 여러 요소를 저장하는 데 사용되는 데이터 구조
- 메모리에서 연속적인 공간을 차지
- 각 요소는 고유한 인덱스를 통해 접근
int arr[5] = {1, 2, 3, 4, 5};
- 중앙 처리 장치(CPU) : 주어진 명령어를 해석하고 실행하여 프로그램의 동작을 제어하고 데이터를 처리하는 역할을 수행하는 전자 장치
- 산술 논리 장치(ALU) : 컴퓨터 프로그램에서 요청하는 연산을 수행하고 결과를 메모리에 저장하거나 다른 레지스터로 전달하는 역할을 수행
- 레지스터(Register) : 매우 빠른 속도로 접근 가능한 임시 저장 공간으로 CPU가 필요로 하는 임시로 보관하거나, 연산의 중간 결과를 저장하며, 메모리 주소 정보나 명령어의 위치 정보 등을 담는 역할을 수행
- 데이터 레지스터(Data Register): 데이터 레지스터는 연산에 사용될 데이터를 임시로 저장하는 레지스터입니다. 예를 들어, 두 숫자를 더하는 연산을 수행할 때, 두 숫자는 먼저 데이터 레지스터에 저장됩니다.
- 주소 레지스터(Address Register): 주소 레지스터는 메모리 주소를 저장하는 레지스터입니다. 이 레지스터를 통해 CPU는 메모리의 특정 위치를 참조할 수 있습니다.
- 프로그램 카운터(Program Counter): 프로그램 카운터는 다음에 실행할 명령어의 주소를 저장하는 레지스터입니다. CPU가 한 명령어를 실행하면, 프로그램 카운터는 다음 명령어로 자동적으로 증가합니다.
- 명령 레지스터(Instruction Register): 명령 레지스터는 현재 실행 중인 명령어를 저장하는 레지스터입니다.
- 상태 레지스터(Status Register): 상태 레지스터는 특정 연산 결과에 대한 정보(예: 오버플로우, 제로, 음수 등)를 저장하는 레지스터입니다. 이 정보는 이후의 명령어에서 조건 분기 등에 사용됩니다.
- 제어 장치 : 제어 신호 발생 및 명령어 해석
Ex) 키보드에서 키 입력이 발생하면 CPU는 이를 감지하고 적절한 처리를 수행합니다. 또한 CPU는 자신이 실행할 명령어를 메모리에서 가져오고, 계산 결과를 메모리에 저장하는 등의 작업을 통해 메모리를 제어
- 메모리 : 메모리는 컴퓨터 하드웨어에 직접적으로 일치하는 실제 저장 공간
- 메모리는 실행되는 프로그램의 명령어와 데이터를 저장합니다.
- 메모리에 저장된 값의 위치는 주소로 알 수 있습니다.
- 내부 단편화(Internal Fragmentation) : 메모리를 할당할 때, 할당된 블록의 크기가 실제 필요한 크기보다 클 경우 발생하는 단편화
Ex) 100바이트의 메모리를 필요로 하는 프로세스에게 128바이트의 메모리를 할당했다면, 28바이트는 낭비되게 되며 이를 내부 단편화라 합니다. 이는 운영체제가 메모리를 일정 크기의 블록 단위로 할당하기 때문에 발생하게 됩니다.
- 외부 단편화(External Fragmentation) : 메모리가 여러 조각으로 분할되어 있어, 충분한 크기의 메모리가 있음에도 불구하고 연속적인 공간이 부족해 메모리를 할당받지 못할 경우 발생하는 단편화
Ex) 메모리에 100바이트짜리 공간이 총 10개 있지만, 이들이 각각 다른 위치에 떨어져 있다면, 1000바이트의 연속된 공간을 필요로 하는 프로세스는 메모리를 할당받지 못하게 됩니다.
- 가상 메모리 : 컴퓨터의 운영체제가 메모리를 효율적으로 관리하고, 더 큰 양의 메모리를 사용하는 것처럼 보이게 하는 기술
- 프로그램에서 현재 필요로 하는 일부만 메모리에 로드하고, 나머지는 디스크에 위치한 스왑 공간에 저장함으로서 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있습니다.
- 워드(Word) : 컴퓨터 메모리의 기본 단위이며, 한 번에 처리할 수 있는 데이터의 크기
- 워드의 크기는 컴퓨터의 아키텍처에 따라 다릅니다.
- 32Bit PC : 4Byte
- 64Bit PC : 8Byte
- 페이지(Page) : 가상 메모리 시스템에서 사용하는 메모리 관리 단위
- 가상 메모리는 물리 메모리를 작은 블록 단위인 페이지로 나눕니다. 각 페이지는 물리적 메모리의 특정 부분을 참조하며, 이를 통해 프로그램은 연속적이지 않은 물리적 메모리를 연속적인 가상 메모리로 인식하게 됩니다.
- 페이징(Paging) : 물리 메모리를 동일한 크기의 페이지로 나누는 메모리 관리 기법
- 프로세스가 메모리에 로드될 때, 그 프로세스의 각 가상 페이지는 물리 메모리의 임의의 페이지 프레임에 매핑됩니다. 이 매핑 정보는 페이지 테이블에 저장되며, CPU는 이 정보를 이용해 가상 주소를 물리 주소로 변환합니다. 페이징 기법은 물리 메모리가 연속적이지 않아도 되므로 메모리 관리가 효율적이며, 외부 단편화 문제를 크게 줄일 수 있습니다.
- 세그먼트(Segment) : 메모리를 논리적으로 분할하는 메모리 관리 기법에서 사용하는 단위
- 각 세그먼트는 프로그램의 논리적인 단위(예: 함수, 데이터 구조 등)를 나타내며, 이 방식은 프로그램의 구조를 메모리에 직접 반영합니다.
- 세그멘테이션(Segmentation): 세그멘테이션은 메모리를 서로 다른 크기의 블록, 세그먼트로 나누는 방식
- 페이징과 달리 논리적인 메모리 분할 방식을 사용하며, 이를 통해 메모리 활용 효율을 향상시키고 외부 단편화 문제를 해결할 수 있습니다. 세그멘테이션은 보다 유연한 메모리 관리를 가능하게 하지만, 내부 단편화를 초래할 수 있습니다.
- 첫 번째 적합(First-Fit/FF): 메모리를 처음부터 순서대로 살펴보면서 처음으로 발견된 크기가 k 이상인 가용 블록에 할당하는 전략
- 빠르게 수행할 수 있지만, 작은 공간을 남기는 방식으로 인해 외부 단편화 문제가 발생할 수 있습니다.
- 다음 적합(Next-Fit/NF): 메모리를 순환하면서 검색하는 방식
- 마지막으로 검사한 위치에서 다음 검색을 시작합니다. First-Fit에 비해 더 빠른 수행 시간을 가지지만, 마찬가지로 외부 단편화 문제가 발생할 수 있습니다.
- 최적 적합(Best-Fit/BF): 메모리를 전체적으로 살펴보고, 요청된 크기에 가장 근접한 가용 블록에 할당하는 전략
- 가용 블록을 최대한 효율적으로 사용할 수 있지만, 검색 시간이 오래 걸릴 수 있으며 작은 블록들이 많이 생겨나는 결과 내부 단편화 문제가 발생할 수 있습니다.
- 보조 기억 장치 : 보관할 정보 저장
- 프로세스를 실행하기 위해 모든 페이지(메모리 분할 단위)가 적재될 필요 없으므로 보조기억장치에 페이지 인(스왑 인), 아웃(스왑 아웃)을 통해 실제 물리 메모리보다 큰 프로세스도 실행할 수 있습니다.
- 입출력 장치 : 컴퓨터 외부와 내부의 정보 교환 장치
- 주변 장치 : 보조 기억 장치와 입출력 장치를 통칭
- 시스템 버스
- 주소 버스 : 주소를 주고 받는 통로
- 데이터 버스 : 명령어와 데이터를 주고 받는 통로
- 제어 버스 : 제어 신호를 주고 받는 통로
'Krafton Jungle' 카테고리의 다른 글
[ KJ ] Week06 (0) | 2024.02.29 |
---|---|
[ KJ ] Week05 (0) | 2024.02.23 |
[ KJ ] Week03 (1) | 2024.02.01 |
[ KJ ] Week02 (1) | 2024.01.26 |
[ KJ ] Week01 (0) | 2024.01.18 |