2주차 회고(어제 진행)
- 다른 개념과의 비교를 묻는 꼬리 질문에 어려움을 겪음
- 더 많은 자료를 보면서 확실히 이해를 해야 할듯
1. 페이징 & 세그먼테이션
세그멘테이션과 페이징의 차이점은 무엇인가요?
세그멘테이션(Segmentation)과 페이징(Paging)은 운영체제에서 메모리 관리를 위해 사용되는 기술입니다.
세그멘테이션은 프로그램을 여러 개의 세그먼트(segment)로 나누어 각 세그먼트를 독립적으로 관리합니다. 세그먼트는 프로그램의 논리적인 단위인 코드, 데이터, 스택 등으로 나뉘어집니다. 이 때문에 메모리 공간을 좀 더 유연하게 사용할 수 있습니다.
반면, 페이징은 프로그램을 고정된 크기의 페이지(page)로 나누어 관리합니다. 페이지는 일정한 크기로 나눠진 블록으로, 프로그램이 사용하는 메모리 공간을 같은 크기의 페이지로 분할해 할당합니다. 이 때문에 메모리를 효율적으로 사용할 수 있으며, 가상 메모리 기능을 구현하기 쉬워져 프로세스 간의 충돌을 피할 수 있습니다.
따라서, 세그멘테이션은 프로그램을 논리적인 단위로 분할하여 메모리를 관리하는 방식이고, 페이징은 프로그램을 고정된 크기의 페이지로 분할하여 메모리를 관리하는 방식입니다.
세그멘테이션과 페이징 장단점
세그멘테이션(Segmentation)의 장점으로는 프로세스의 논리적 구조를 반영하여 프로세스 간의 충돌을 방지하고, 동적 메모리 할당 및 해제가 용이합니다.
단점으로는 외부 단편화(External Fragmentation) 문제가 발생할 수 있으며, 주소 변환을 위해 보조 기억장치 접근이 필요하여 오버헤드가 큽니다.
페이징(Paging)의 장점으로는 외부 단편화 문제가 발생하지 않으며, 페이지 단위로 메모리 할당이 가능하여 동적 메모리 관리가 편리합니다.
단점으로는 내부 단편화(Internal Fragmentation) 문제가 발생할 수 있으며, 페이지 테이블에 대한 오버헤드가 발생합니다. 또한 페이지 크기를 결정하는 것이 어려울 수 있습니다.
내부 단편화와, 외부 단편화에 대해 설명해 주세요.
내부 단편화(Internal Fragmentation)는 고정 크기의 메모리 블록을 할당할 때, 블록보다 작은 크기의 프로세스가 할당되어 블록 내부에 빈 공간이 발생하는 현상입니다.
외부 단편화(External Fragmentation)는 서로 크기가 다른 메모리 블록들이 불규칙하게 배치되어 메모리 공간을 낭비하는 현상입니다. 이는 동적 메모리 할당에서 발생하며, 메모리 할당과 해제가 반복되면서 발생할 수 있습니다.
페이지에서 실제 주소를 어떻게 가져올 수 있는지 설명해 주세요.
페이지에서 실제 주소를 가져오기 위해서는 먼저 페이지 번호와 페이지 내의 오프셋 값을 알아내야 합니다. 이를 위해 가상 주소를 페이지 번호와 오프셋 값으로 나누어 계산합니다.
페이지 번호는 페이지 테이블을 이용하여 물리적 주소와 매핑되는 프레임 번호를 찾습니다.
프레임 번호와 오프셋 값을 이용하여 물리적 주소를 계산할 수 있으며, 이를 통해 실제로 데이터가 저장된 메모리의 위치를 알아낼 수 있습니다.
이 과정은 모든 가상 주소마다 수행되며, 매우 빠르게 수행되도록 하기 위해 페이지 테이블을 캐시에 저장하는 등 최적화 기술이 사용됩니다.
어떤 주소공간이 있을 때, 이 공간이 수정 가능한지 확인할 수 있는 방법이 있나요?
주소 공간이 수정 가능한지 여부를 확인하는 방법은 운영체제에서 제공하는 메모리 보호 기법을 이용할 수 있습니다.
메모리 보호 기법은 프로세스가 접근 가능한 메모리 영역을 제한하고, 실행 중인 프로세스가 다른 프로세스나 운영체제 자체의 메모리에 침범하는 것을 방지합니다.
보호 모드 플래그나 페이지 권한 등을 이용하여 메모리 영역을 보호할 수 있으며, 이를 통해 프로그램이 수정 가능한지 여부를 확인할 수 있습니다.
32비트에서, 페이지의 크기가 1kb 이라면 페이지 테이블의 최대 크기는 몇 개일까요?
32비트 시스템에서 가상 주소 공간은 4GB(=2^32 바이트)입니다.
1KB(=2^10 바이트) 크기의 페이지를 사용한다면, 4GB를 1KB로 나눈 값인 2^32/2^10 = 2^22 개의 페이지가 필요합니다.
각 페이지당 4바이트 크기의 페이지 테이블 엔트리가 필요하므로, 페이지 테이블의 최대 크기는 2^22 * 4B = 16MB가 됩니다.
페이지 크기에 대한 trade-off를 설명해주세요.
페이지 크기는 메모리 관리의 성능과 메모리 사용 효율성 간의 trade-off 관계가 있습니다.
큰 페이지를 사용하면, 페이지 당 페이지 테이블 엔트리 수가 적어지므로 페이지 테이블 크기가 작아지고 페이지 매핑과 전환에 필요한 시간이 감소합니다.
하지만 작은 페이지를 사용하면, 내부 단편화가 줄어들고 데이터 접근 시 불필요한 데이터를 가져오는 비용이 감소합니다.
따라서 페이지 크기를 선택할 때는 시스템의 메모리 사용 패턴과 접근 패턴, 페이지 테이블과 캐시 등의 하드웨어 요소들을 고려하여 최적의 크기를 결정해야 합니다.
페이지 크기가 커지면 페이지 폴트(프로그램이 자신의 주소 공간에는 존재하지만 시스템의 RAM에는 현재 없는 데이터나 코드에 접근 시도하였을 경우 발생하는 현상)가 더 많이 발생하는지?
페이지 크기가 커지면 페이지 폴트가 더 적게 발생할 가능성이 있습니다.
페이지 크기가 커지면 페이지당 필요한 페이지 테이블 엔트리의 수가 감소하고, 페이지 매핑과 전환에 필요한 시간이 감소합니다.
그러나 페이지 크기가 너무 커지면 내부 단편화가 발생할 수 있으며, 작은 데이터를 처리할 때 불필요한 데이터를 가져오는 비용이 증가하여 성능 저하를 일으킬 수 있습니다.
따라서 페이지 크기를 선택할 때는 메모리 사용 패턴과 하드웨어 구성 등 여러 요소를 고려하여 최적의 크기를 결정해야 합니다.
TLB는 무엇인가요?
TLB(Translation Lookaside Buffer)는 가상 주소와 실제 물리 주소 간의 변환 정보를 저장하고 있는 캐시입니다.
프로세스가 가상 주소를 참조할 때마다, 해당 주소가 메모리 상 어디에 위치하는지 실제 주소로 변환해야 합니다.
TLB는 이러한 변환을 빠르게 수행하여 메모리 액세스 속도를 향상시키며, 페이지 테이블과 같은 대용량의 메모리를 사용하지 않고도 변환 정보를 저장하고 검색할 수 있습니다.
TLB는 캐시 형태로 구현되며, 하드웨어에서 지원하므로 속도가 빠르고 성능상 이점이 크다는 장점이 있습니다.
TLB를 쓰면 왜 빨라지나요?
TLB는 가상 주소와 실제 물리 주소 간의 변환 정보를 캐싱하여, 매번 메모리에 접근하여 변환 정보를 찾아야 하는 번거로움을 줄여줍니다.
프로세스가 가상 주소를 참조할 때마다, TLB를 검색하여 해당 주소의 변환 정보가 존재하면 빠르게 실제 주소로 변환해줍니다.
따라서 TLB를 사용하면 페이지 테이블과 같은 대용량의 메모리를 사용하지 않고도 변환 정보를 저장하고 검색할 수 있으므로, 메모리 액세스 속도가 향상되어 빠르게 데이터에 접근할 수 있게 됩니다.
MMU가 무엇인가요?
MMU(Memory Management Unit)는 주소 변환을 수행하는 하드웨어입니다.
프로세스가 가상 주소를 참조하면, MMU는 페이지 테이블을 사용하여 가상 주소를 실제 물리 주소로 변환합니다.
이러한 주소 변환은 MMU에 의해 수행되며, 프로세스는 이를 의식하지 않고 메모리에 접근할 수 있습니다.
MMU는 하드웨어에서 지원하므로 속도가 빠르고, 프로세스마다 독립적인 가상 주소 공간을 할당하여 메모리 보호와 관리를 수행할 수 있습니다.
TLB와 MMU는 어디에 위치해 있나요?
TLB(Translation Lookaside Buffer)와 MMU(Memory Management Unit)는 모두 CPU(Central Processing Unit) 내부에 위치합니다.
TLB는 CPU 내부 캐시에 위치하며, 가상 주소와 실제 물리 주소 간의 변환 정보를 저장하고 검색합니다.
MMU는 CPU 내부의 하드웨어로, 주소 변환을 수행하여 가상 주소를 실제 물리 주소로 변환합니다. MMU는 CPU 내부에 위치하여 프로세스가 메모리에 액세스할 때마다 주소 변환을 수행합니다.
2. 페이징 교체 알고리즘
Page Fault를 줄이는 방법에 대해서 설명하세요
- 프리패치(Prefetching): 프로세스가 실제로 필요로 할 페이지를 미리 캐시에 로드하여 Page Fault를 줄입니다.
- 페이지 교체 알고리즘 개선: 페이지 교체 알고리즘을 개선하여 Page Fault를 줄입니다.
- 메모리 사용량 조절: 메모리 사용량이 너무 많으면 Page Fault가 발생할 가능성이 높아지므로, 적절한 메모리 사용량을 유지해야 합니다.
- 페이지 크기 조절: 페이지 크기를 크게 하면, 한 번에 더 많은 데이터를 로드할 수 있어 Page Fault가 줄어듭니다.
- 다중 스레드 처리: 다중 스레드를 사용하여 여러 작업을 병렬로 처리하면 Page Fault가 발생할 확률이 낮아집니다.
page fault가 발생하였을때, 이를 처리하는 과정을 설명해주세요.
- CPU는 페이지 테이블에서 해당 페이지의 위치를 찾으려고 시도합니다.
- 페이지 테이블에 해당 페이지가 없으면, Page Fault 예외가 발생합니다.
- Page Fault 예외 핸들러가 동작하면, 운영체제는 요청한 페이지를 물리 메모리로 가져와야 합니다.
- 가져올 페이지가 디스크에 있다면, 운영체제는 디스크에서 페이지를 읽어와 물리 메모리의 빈 페이지 프레임에 적재합니다.
- 페이지 프레임이 부족한 경우, 다른 페이지를 교체하여 빈 페이지 프레임을 확보합니다.
- 페이지가 물리 메모리에 적재되면, 페이지 테이블을 업데이트하고, 프로세스는 페이지에 접근하여 계속 실행됩니다.
페이지 교체 알고리즘엔 어떤 것들이 있나요?
- FIFO(First In First Out): 가장 오래된 페이지부터 교체합니다.
- LRU(Least Recently Used): 가장 오랫동안 사용되지 않은 페이지부터 교체합니다.
- LFU(Least Frequently Used): 가장 적게 사용된 페이지부터 교체합니다.
- NUR(Not Used Recently): 사용하지 않은 페이지 중에서 참조 비트와 수정 비트를 기반으로 교체할 페이지를 선택합니다.
- Optimal: 앞으로 가장 오랫동안 사용되지 않을 페이지를 교체합니다. 이 알고리즘은 최적의 교체를 수행하지만, 미래의 참조 패턴을 예측하기 어렵기 때문에 구현이 어렵습니다.
MFU MRU 의 가치?
MFU(Most Frequently Used)와 MRU(Most Recently Used)는 페이지 교체 알고리즘에서 사용되는 방식입니다.
MFU는 최근에 사용된 페이지 중에서 가장 빈도가 높은 페이지를 교체하는 방식으로, 빈번하게 사용되는 페이지를 유지하여 페이지 폴트를 줄일 수 있습니다.
MRU는 가장 최근에 사용된 페이지를 교체하는 방식으로, 최근에 사용되었던 페이지를 유지하여 캐시 히트율을 높일 수 있습니다.
따라서, MFU와 MRU는 각각 페이지 교체 알고리즘에서 가장 빈번하게 사용되는 페이지와 가장 최근에 사용된 페이지를 유지하여 페이지 폴트를 줄이거나 캐시 히트율을 높이는 가치가 있습니다.
Clock / Second chance
Clock 또는 Second Chance는 페이지 교체 알고리즘 중 하나로, 페이지를 참조하는 순서대로 원형 버퍼 형태로 구성된 페이지 프레임 리스트를 사용합니다.
알고리즘은 각 페이지 프레임마다 참조 비트(reference bit)와 수정 비트(modified bit)를 유지합니다. 참조 비트는 페이지를 참조할 때마다 1로 설정되고, 수정 비트는 페이지 내용이 변경될 때마다 1로 설정됩니다.
Clock 알고리즘은 페이지 프레임 리스트에서 참조 비트가 0인 페이지를 찾아서 교체합니다. 참조 비트가 1인 페이지를 만나면 참조 비트를 0으로 초기화하고 다음 페이지를 찾습니다. 이 과정을 모든 페이지를 한 바퀴 돌아서 찾을 때까지 반복합니다.
Second Chance 알고리즘은 Clock 알고리즘과 유사하지만, 참조 비트가 1인 페이지가 나타날 경우 이 페이지를 교체하지 않고 참조 비트를 0으로 초기화한 후 다음 페이지를 찾습니다. 이와 같이 참조 비트가 1인 페이지를 발견할 때까지 원형 버퍼를 순회하며 교체할 페이지를 찾습니다.
Clock과 Second Chance 알고리즘은 구현이 간단하며, 페이지 프레임 리스트를 한 바퀴 돌면서 교체할 페이지를 찾는 방식으로 페이지 폴트를 줄이는 데에 효과적입니다.
LRU 알고리즘은 어떤 특성을 이용한 알고리즘이라고 할 수 있을까요?
LRU 알고리즘은 페이지 교체 알고리즘 중에서 가장 오랫동안 참조되지 않은 페이지를 교체하는 방식입니다. 이를 위해 메모리 내의 각 페이지를 스택이나 큐와 같은 자료구조로 유지하고, 최근에 참조된 페이지를 가장 위로 올리는 방식으로 구현됩니다.
LRU 알고리즘은 시간 지역성(time locality)이라는 특성을 기반으로 동작합니다. 이는 최근에 참조된 페이지가 다시 참조될 확률이 높다는 것을 가정한 것입니다. 따라서 LRU 알고리즘은 가장 오랫동안 참조되지 않은 페이지를 교체함으로써 메모리 내의 페이지 교체율을 낮출 수 있습니다.
LRU 알고리즘을 구현한다면, 어떻게 구현할 수 있을까요?
LRU 알고리즘을 구현하는 가장 간단한 방법은, 페이지들을 나열한 리스트를 유지하고, 가장 최근에 참조된 페이지를 리스트의 가장 앞쪽으로 이동시키는 것입니다. 이렇게 하면 리스트의 끝에 있는 페이지는 가장 오래전에 참조된 페이지가 되며, 이를 교체 대상으로 선택하면 됩니다.
만약 리스트를 이용한 LRU 구현 방식이 메모리 사용량이 많거나 효율적이지 않을 경우, 최근에 참조된 페이지의 목록을 유지하는 스택이나 큐를 이용할 수도 있습니다. 이를 위해 각 페이지에는 타임스탬프를 부여하고, 최근에 참조된 페이지는 스택이나 큐의 가장 위로 올라가도록 구현할 수 있습니다.
3. 메모리
메모리의 연속할당 방식 세 가지를 설명해주세요. (first-fit, best-fit, worst-fit)
First-fit: 가용 메모리 중에서 가장 먼저 발견되는 적당한 크기의 공간에 할당하는 방식입니다.
Best-fit: 가용 메모리 중에서 요청한 크기와 가장 근접한 크기의 공간을 찾아 할당하는 방식입니다.
Worst-fit: 가용 메모리 중에서 가장 큰 공간을 찾아 할당하는 방식입니다.
worst-fit이 왜 사용될까요?
Worst-fit은 가용 메모리를 최대한 남기기 위해 사용됩니다. 따라서 메모리 공간을 최대한 확보하고자 하는 경우에 적합합니다.
buddy-system / slab Memory Allocator
Buddy-system은 이진트리 기반의 연속할당 방식으로, 메모리를 2의 거듭제곱 단위로 분할하여 사용합니다. 이를 통해 외부 단편화를 방지하고, 할당/해제 시간을 단축시킬 수 있습니다.
Slab Memory Allocator는 고정 크기의 메모리 블록을 미리 할당해두고, 이를 이용해 객체를 할당하는 방식입니다. 이를 통해 메모리 사용을 효율적으로 관리하고, 할당/해제 시간을 단축시킬 수 있습니다.
성능이 가장 좋은 알고리즘은 무엇일까요?
성능이 가장 좋은 메모리 할당 알고리즘은 일반적으로 Buddy-system입니다. 이진트리 기반으로 메모리를 분할하기 때문에 외부 단편화를 방지하면서도 할당/해제 시간이 빠르기 때문입니다.
물리메모리/가상메모리/캐시메모리 간단히 설명
물리메모리는 컴퓨터 시스템에 실제로 장착된 메모리를 의미하며,
가상메모리는 프로세스가 접근 가능한 메모리 공간을 가상으로 제공하는 것을 의미합니다.
캐시메모리는 CPU 내부에 위치한 고속 버퍼 메모리로, 주로 데이터나 명령어의 캐시를 담당합니다.
물리메모리는 가장 빠르지만 크기가 제한적이며, 가상메모리는 디스크 등의 보조 기억 장치를 이용하므로 느린 접근 시간을 가집니다. 캐시메모리는 빠른 접근 속도를 가지며, CPU의 성능을 향상시키는 데 중요한 역할을 합니다.
가상 메모리란 무엇인가요?
가상 메모리는 프로그램이 동작할 때 필요한 부분만 물리 메모리에 올려 사용하는 메모리 관리 기술입니다.
가상 메모리가 가능한 이유가 무엇일까요?
가상 메모리는 운영체제가 물리 메모리와 디스크를 조합하여 제공하므로 물리 메모리보다 큰 프로그램을 실행할 수 있습니다.
또한, 여러 프로세스가 메모리를 공유할 수 있습니다.
Secondary Memory에서 page를 가져오는 영역 이름
Secondary Memory에서 페이지를 가져오는 영역의 이름은 스왑(Swap) 영역입니다.
Page Fault가 발생했을 때, 어떻게 처리하는지 설명해 주세요.
Page Fault가 발생하면, 운영체제는 해당 페이지를 물리 메모리로 가져와야 합니다. 이를 위해 디스크에서 페이지를 찾아 물리 메모리의 빈 페이지에 할당하고 페이지 테이블을 업데이트합니다.
페이지 크기에 대한 Trade-Off를 설명해 주세요.
페이지 크기에 대한 Trade-Off는 페이지 크기가 작을수록 내부 단편화가 적어지고 페이지 교체 비용이 적지만, 페이지 테이블이 크고 오버헤드가 커집니다. 페이지 크기가 클수록 외부 단편화가 적어지고 페이지 테이블 크기가 작아지지만, 페이지 교체 비용이 높아집니다.
페이지 크기가 커지면, 페이지 폴트가 더 많이 발생한다고 할 수 있나요?
페이지 크기가 커지면 페이지 폴트가 더 적게 발생할 가능성이 있지만, 페이지 크기가 너무 커지면 한 페이지에서 여러 프로세스의 데이터가 섞이기 때문에 메모리 오염 문제가 발생할 수 있습니다. 따라서 적절한 페이지 크기를 선택해야 합니다.
캐시 메모리 및 메모리 계층성에 대해 설명해 주세요.
캐시 메모리는 CPU와 주 메모리 사이에 위치하며 빠른 속도로 데이터를 처리하고 전송하는 임시 저장소입니다. 메모리 계층 구조에서는 캐시가 여러 단계로 구성되어 L1 캐시, L2 캐시, L3 캐시 등이 있습니다. 캐시에 올라오는 데이터는 캐시 라인이라는 고정 크기의 블록 단위로 관리됩니다. 캐시 메모리는 CPU 칩 내부에 내장되어 있거나 별도의 칩에 위치할 수 있습니다.
Cache는 어디있나?
캐시 메모리는 CPU와 주 메모리 사이에 위치하며 빠른 속도로 데이터를 처리하고 전송하는 임시 저장소입니다. 메모리 계층 구조에서는 캐시가 여러 단계로 구성되어 L1 캐시, L2 캐시, L3 캐시 등이 있습니다. 캐시에 올라오는 데이터는 캐시 라인이라는 고정 크기의 블록 단위로 관리됩니다. 캐시 메모리는 CPU 칩 내부에 내장되어 있거나 별도의 칩에 위치할 수 있습니다.
L1, L2 캐시란
L1 캐시는 CPU 코어 내부에 위치하며 속도가 가장 빠릅니다. L2 캐시는 L1 캐시 바로 위에 위치하며 속도가 더 느리고 용량이 더 큽니다. 캐시에 올라오는 데이터는 캐시 라인이라는 고정 크기의 블록 단위로 관리됩니다. 캐시 간의 데이터 일관성을 유지하기 위해 캐시 동기화 기술이 사용됩니다.
캐시에 올라오는 데이터는 어떻게 관리가 되나?
캐시에 올라오는 데이터는 cache line 단위로 관리됩니다. Cache line은 캐시에서 데이터를 저장할 수 있는 최소 단위로, 일반적으로 64 바이트 또는 128 바이트 크기로 구성됩니다. 캐시는 데이터를 가져올 때 전체 cache line을 가져오고, 해당 데이터가 필요할 때 캐시에서 읽어올 수 있도록 유지합니다. 이렇게 함으로써, 같은 메모리 주소를 다시 요청할 때 캐시에서 데이터를 더 빠르게 가져올 수 있습니다. 또한, 캐시 라인은 데이터를 쓸 때 덮어쓰기가 일어날 수 있으므로, 쓰기 연산을 최소화하기 위해 캐시 라인을 통째로 가져와서 쓰는 것이 좋습니다.
캐시간의 동기화는 어떻게 이루어지나요?
캐시간의 동기화는 캐시 일관성 프로토콜을 통해 이루어집니다. 캐시 일관성 프로토콜은 다수의 캐시가 메모리와 일관성을 유지하도록 하는 메커니즘입니다. 대표적인 캐시 일관성 프로토콜로는 MESI와 MOESI가 있습니다.
캐시 메모리의 Mapping 방식에 대해 설명해 주세요.
캐시 메모리의 Mapping 방식에는 Direct Mapping, Set-Associative Mapping, Full-Associative Mapping 등이 있습니다. 각각의 방식은 캐시 라인을 주 메모리의 어느 위치에 대응시키는지 결정합니다.
캐시의 지역성에 대해 설명해 주세요.
캐시의 지역성은 데이터에 접근할 때, 최근에 접근한 데이터와 근접한 데이터가 빈번하게 접근되는 경향이 있다는 것을 의미합니다. 이를 기반으로 데이터 접근 패턴을 분석하고 데이터를 미리 캐시에 올려놓음으로써 성능을 향상시킬 수 있습니다.
캐시의 지역성을 기반으로, 이차원 배열을 가로/세로로 탐색했을 때의 성능 차이에 대해 설명해 주세요.
캐시의 지역성은 데이터 참조 패턴에서 발생하는 성질로, 최근에 참조된 데이터와 그와 인접한 데이터가 더 자주 참조될 가능성이 높다는 것입니다. 이 지역성을 기반으로 이차원 배열을 가로/세로로 탐색하는 경우, 세로 방향으로 탐색하는 것이 좀 더 캐시 지역성을 활용하여 캐시 미스 확률을 낮출 수 있습니다. 따라서, 세로 방향으로 탐색하는 것이 가로 방향으로 탐색하는 것보다 성능이 좋을 수 있습니다.
GDB와 같은 디버거의 경우 다른 프로세스에 접근하여 절대적 메모리 주소와 값을 읽어올 수 있습니다.
어떻게 가능한지 동작 방식에 대해서 설명하세요.
GDB와 같은 디버거는 운영체제가 제공하는 인터페이스를 사용하여 다른 프로세스의 메모리에 접근합니다. 디버거는 해당 인터페이스를 통해 디버깅 대상 프로세스에 접근하고, 해당 프로세스의 가상 주소를 물리적인 주소로 변환하여 절대적인 메모리 주소를 얻습니다. 이후 해당 주소의 값을 읽어와 디버깅에 활용합니다. 디버거는 운영체제와 함께 동작하며, 운영체제의 권한과 제공하는 인터페이스를 이용하여 메모리에 접근합니다.
4. 파일시스템
File Descriptor 에 대해 설명해 주세요.
File Descriptor는 파일이나 소켓 등을 가리키는 추상화된 숫자입니다. 운영체제는 파일 디스크립터를 사용하여 파일 또는 I/O 장치에 대한 작업을 수행합니다. C언어의 파일 입출력 라이브러리 함수들은 이 파일 디스크립터를 이용하여 파일 입출력을 처리합니다.
표준 입력(STDIN), 표준 출력(STDOUT), 표준 에러(STDERR)
표준 입력(STDIN)은 사용자로부터 입력을 받는 스트림입니다. 예를 들어, 키보드로부터 사용자 입력을 받을 때 사용됩니다.
표준 출력(STDOUT)은 프로그램에서 출력한 데이터를 출력하는 스트림입니다. 예를 들어, 콘솔 화면에 출력하는 것이 대표적인 예시입니다.
표준 에러(STDERR)는 프로그램 실행 중에 발생하는 에러 메시지를 출력하는 스트림입니다. 이 스트림은 일반적으로 표준 출력(STDOUT)과 별도로 처리되어, 에러 메시지와 일반적인 출력을 분리하여 관리합니다.
File System에 대해 설명해 주세요.
파일 시스템은 데이터를 저장하는 데 사용되는 파일 및 디렉토리를 관리하는 소프트웨어입니다. 일반적으로 하드 디스크, SSD, USB 드라이브 등의 저장 장치에 파일 시스템이 존재합니다. 파일 시스템은 파일 및 디렉토리를 만들고 관리하는 데 사용됩니다.
i-Node에 대해 설명해 주세요.
i-Node (Index Node)은 파일 시스템에서 파일을 저장하는 데 사용되는 데이터 구조입니다.
i-Node은 파일의 메타 데이터를 저장합니다. 메타 데이터는 파일의 권한, 소유자, 생성 날짜, 마지막 수정 날짜 및 파일 크기와 같은 정보를 포함합니다. 또한 i-Node은 파일 데이터 블록의 위치도 가리킵니다. 따라서 파일에 대한 모든 정보를 i-Node에서 읽어올 수 있습니다. 파일 시스템은 i-Node을 사용하여 파일을 검색하고 액세스합니다. i-Node은 일반적으로 파일 시스템의 인덱스나 링크드 리스트와 같은 방식으로 구성됩니다.
'프로그래밍 > CS' 카테고리의 다른 글
CS스터디 4주차 - 자료구조 (0) | 2023.03.31 |
---|---|
지역성: 시간지역성과 공간지역성 (0) | 2023.03.29 |
CS스터디 2주차 - 인터럽트 데드락 (0) | 2023.03.17 |
CS스터디 1주차 - 프로세스 (1) | 2023.03.16 |
프로세스 vs 스레드 차이 (0) | 2023.03.15 |
댓글