BNF를 확장시킨 것이 EBNF이다. Extended BNF 그래서 EBNF다. 일반적으로 3가지 확장 사항이 포함된다. 1. 선택: '[', ']'로 표현한다. 예시: ::= if( ) [ else ] 위 예제를 보고 else 부분이 선택되지 않는 경우 if( ) 란 것을 우린 알 수 있다. 2. 반복: '{', '}'으로 표시하고, 무한정 반복되거나 생략될 수 있음을 나타낸다. 선택이란 다른 점이 별로 없어보이지만, 선택은 반복이 아닌란 것을 명심하자. 예시: ::= { , } 위 예시를 지금은 이해가 되지 않을 수 있지만, 조금 있다 볼 예제를 보고 알 수 있다. 3. 다중 선택: '(', ')'로 표시하고 OR란 것을 알 수 있다. 소괄호로 표현하기 때문에 어휘항목인 터미널이랑 혼동될 수 있으니 ..
갓구글에 검색해도 많은 정보가 나오지 않는다니, 구글에 BNF와 EBNF에 대한 내용을 추가하려고 적고 있다. 학교 후배님들이 보고서 공부를 조금 더 수월하게 하셨으면 좋겠습니다. 😂 BNF는 우리가 평소에 사용하는 프로그래밍 언어의 문법을 만들어놓은 규칙이라고 보면 된다. 말이 조금 어려운데, 간단하게 생각하면 "int num = 0;"이다 이런 하나의 문장을 컴파일러가 해석하기 위해서 어떠한 규칙을 가지고 있어야 한다. BNF(Backus-Naur Form)는 ::= = ;와 같은 BNF 생성 규칙 예를 가질 수 있다. 방금 적은 "int num = 0;"와 동일하다. 이 생성 규칙의 예의 ::= 기호는 ->와 같은 뜻으로, 왼쪽에서 오른쪽으로 기호를 정의한다는 뜻을 가진다. 하지만 이렇게 말하면 또..
OS는 거의 모든 공간 문제를 해결할 때 두가지 방법이 있다. ↓ Segmetation 가변 크기의 조각들로 분할하는 것, 공간을 다양한 크기의 청크로 분할 할때 공간 자체가fragmented(단편화) 될 수 있고, 할당은 더 어려워진다. Paging 프로세스의 주소 공간을 고정 크기의 단위로 나눈다. 고정 크기의 단위를 page라 부른다. 이에 맞게 Phsycal Memory를 page frame이라고 불리고 고정 크기의 슬롯의 배열이라고 생각한다. 각각의 frame에 하나의 가상 메모리 페이지를 저장할 수 있다. 우리의 문제: Page를 사용하여 어떻게 Memory를 가상화할 수 있을까? 간단한 예제 및 개요 총 크기 64bite, 각 page는 16bite 페이지로 구성된 작은 주소 공간을 통해 이..
Free Space Management 새 주소 공간을 만들었더니 듬성 듬성 빈 공간이 생겼어!! Oh my god!! 지져스! 이 빈 공간을 정리를 하고 싶어! 어떻게? 할까..잘하면 돼!!! 모든 메모리 관리 시스템에 대한 근본적인 측면에 대한 논의, 바로 Free space management다! 이 장은 메모리 가상화와는 거리가 조금 멀다. 관리하고 있는 공간이 고정 크기의 단위로 나누어져있다면 관리가 쉽다. 그런 경우 고정 크기 단위의 리스트를 유지하고 클라이언트가 그 중 하나를 요청하면 첫 번째 항목을 반환하면 되기 때문이다. 하지만 그렇게 쉬우면 이 챕터를 하지 않았겠지? 빈 공간 관리가 더 어렵고 흥미로운 경우는 관리하는 공간이 가변-크기 빈공간의 집합으로 구성되어있는 경우다. 영문으로 v..
마치 구름이 낀 것 마냥 앞이 보이지 않는다. 가정: 프로세스 주소 공간 전체를 Memory에 loding했다. base, bound 레지스터로 OS는 Process를 Physcial Memory의 다른 부분으로 쉽게 재배치할 수 있다. Stack, Heap 사이에 사용되지 않는 큰 공간이 존재한다. not in use 공간 때문에 낭비가 심하다. Address Space공간이 Physcial Memory보다 큰 경우 실행이 매우 어렵다. Segmentation 대용량 주소 공간을 어떻게 자원할까? ↑ 4GB, 32GB bit 주소 공간을 상상해보자. 프로그램은 단지 수 MB만 사용함에도 불하고 주소 공간 전체에 메모리 LOAD 어떻게 할까? Basic idea: Instead of having just..
CPU Virtualization 부분에서, LDE(Limited direct execution) 기법에 대해 집중적으로 다룬다. CPU 가상화의 아이디어는 간단하다. → 대부분 프로그램은 하드웨어에서 직접 실행된다. But 프로세스가 System Call을 호출하러가나 Timer Interrupt 발생할 때 특정 순간에는 OS가 개입하여 Process issue가 발생하지 않도록 한다. OS는 약간의 hardware지원을 받아 efficient Virtualization을 제공하기 위해 실행 프로그램의 방해가 안 되도록한다. 중요한 순간에는 OS가 관여하여 하드웨어를 직접 제어한다. 현대 OS의 목표: efficiency, Control Virtualizing memory Virtualization을 ..
Type of Memory In running a C program, there are two types of memory that are allocated. Stack memory: The allocations of deallocations of it are mangaged implicitly by compiler for a programmer(so called as automatic memory). A stack frame stores return address, function parameters, and tempral variables etc. Heap memory: The allocations and deallocations are explicitly handled by the programme..