[ Paging System에서 LRU, LFU 사용 가능? ] 만약 CPU에서 프로세스 A가 Running 중일 경우, 프로세스 A의 논리적인 메모리에서 Instruction을 하나씩 읽어와서 실행한다. CPU가 프로세스 A에 대한 논리적 주소를 주면 Page Table을 통해서 물리적 메모리 주소로 변환하여 해당 주소의 내용을 CPU로 읽어 들어야 한다. 주소 변환 후, 해당 페이지가 물리적 메모리에 올라와 있으면 물리적 메모리에서 직접 내용을 읽어 CPU로 가져간다. 이 과정에서 운영체제가 하는 일은 없다. 주소 변환은 하드웨어적으로 일어나는 일이며, CPU는 프로세스 A가 가지고 있으면서 주소 변환 후 메모리 참조를 한다. 반면에 프로세스 A가 Running 하면서 주소 변환을 요청했는데 In..
[ string ? ] C++ STL에서 제공하는 클래스로 문자열을 다루는 클래스이다. C에서 char*, char[]로 문자열을 다뤘다면, C++에서는 string을 통해 문자열을 하나의 변수처럼 사용할 수 있다. char*, char []과 다르게 문자열 끝에 '\0' 문자가 들어가지 않고, 문자열의 길이를 동적으로 변경이 가능하다. ● std::cout std::cout은 Stream buffer에 대한 출력을 제어하기 위한 전역 객체이다. 문자열을 출력하려면
● 다양한 캐싱 환경 Replacement 알고리즘은 가상 메모리 시스템에서만 사용되는 게 아니라 Caching이라는 다양한 곳에서 사용이 되고 있다. 한정된 빠른 공간에다 데이터를 저장해 놓고, 다음에 똑같은 요청이 왔을 때 느린 저장 장치까지 가지 않고 Cache로부터 바로 서비스를 한다. 속도가 더 빠르다. ✓ Paging System Paging System에서는 한정된 빠른 공간이 메인 메모리이고 느린 저장 장치가 Backing Store이다. 그래서 가능하면 물리적 메모리에서 서비스를 하며, 메모리에 올라와 있지 않을 때 (Page Fault)에만 Backing Store에서 읽어온다. ✓ Cache Memory CPU가 메모리에 접근할 때, 메모리에 직접 접근하는 게 아니라 CPU와 Ma..
[ 페이지 교체 (Page Replacement) ] 페이지를 쫓아내는 걸 Page Replacement라고 하며 OS가 하는 일이다. 이때 사용하는 알고리즘은 Replacement Algorithm이다. 비어있는 페이지가 없는 경우에는 어떤 페이지를 쫓아낸 후, 해당 메모리에 페이지를 올려야 한다. 가능하면 Page Fault가 일어나지 않고 되도록이면 메모리에서 직접 처리할 수 있도록 되어있다. 왜냐하면 페이지를 쫓아내고 난 후, 시간이 얼마 지나지 않아 그 페이지가 다시 참조가 되면 해당 페이지를 Swap area에서 메모리로 다시 올려야 한다. 이 과정은 시간이 매우 오래 걸린다. 어떤 페이지를 메모리에서 쫓아내고 그 자리에 어떤 페이지를 올려놓을 것인가를 결정해야 한다. 가능한 Page F..
[ 프로젝트 생명주기 ] 이 책은 프로젝트 단계에 따라 네 부분으로 나뉘어 있으며 각 단계가 반드시 순차적인 것은 아니다. 1장 ~ 6장 : 보드 브링업 단계. 개발 환경을 설정하고 플랫폼을 만드는 데 필요한 요소들 7장 ~ 11장 : 시스템 아키텍처와 설계 선택. 프로그램과 데이터의 저장소, 시스템을 어떻게 초기화할지 12장 ~ 13장 : 응용 프로그램 작성. 프로세스와 스레드 모델을 효과적으로 사용하는 방법과 메모리 관리 방법 14장 ~ 15장 : 디버깅과 성능 최적화. 응용 프로그램과 커널의 코드를 추적, 프로파일, 디버깅 방법 16장 : 실시간 프로그래밍 임베디드 리눅스 4요소 모든 프로젝트는 이 4요소를 구하고 수정하고 배포하면서 시작한다. 툴체인 (toolchain) : 타깃 장치를 위한 코드..
● GPL (General Public License) 기본적으로 프로그램을 개발할 때, GPL 코드를 일부라도 사용하게 되면 해당 프로그램은 GPL이 된다. GPL을 가진 프로그램을 유료로 판매(배포)하는 것은 가능하지만 반드시 전체 소스 코드는 무료로 공개해야 한다. 예를 들어, GPL 코드를 수정하거나 일부 사용하여 프로그램을 개발하여 외부에 공개하거나 판매하고자 할 경우에는 반드시 GPL 규청에 따라 프로그램의 전체 소스 코드를 무료로 공개해야 한다. 전체 코드를 공개했다가다른 개발자가 이를 기반으로 좀 더 개선된 버전의 제품을 개발하여 판매할 수도 있다. 그렇다면 억울하겠지 .. ● LGPL (Lesser General Public License) LGPL은 GPL보다 훨씬 완화된 조건의 공개 ..
[ Demand Paging ] 물리적 메모리 주소 변환은 운영체제가 관여하지 않는다. 하지만 Virtual Memory 기법은 전적으로 운영체제가 관여를 하고 있다. Demand Paging이라는 것은 Page 요청이 있으면 그 페이지를 메모리에 올리겠다는 것이다. 프로그램이 실행될 때, 그 프로세스를 구성하는 주소 공간을 한꺼번에 물리적 메모리에 올리는 게 아니라 요청이 있을 때 메모리에 올려놓는다. 이렇게 되면 I/O 양이 상당히 줄어들고 그만큼 물리적 메모리를 사용하는 양이 감소된다. 좋은 소프트웨어일수록 방어적으로 코드를 짜기 때문에 이상한 사용자가 이상한 짓을 하더라도 문제가 생기지 않도록 하는 것이 좋다. 즉 프로그램을 구성하는 주소 공간에서 빈번히 사용되는 부분은 제한적이므로 사용이 되..
연산자 오버로딩 (operator overloading) 함수 오버로딩이란 같은 일을 처리하는 함수를 매개변수의 형식을 달리하여 하나의 이름으로 만들 수 있게 해준다. 마찬가지로, 하나의 연산자를 여러 의미로 사용할 수 있게 해주는 게 연산자 오버로딩이다. 연산자 함수 (operator function) C++에서 연산자를 오버로딩하기 위해서 연산자 함수 (operator function)을 사용한다. operator연산자(parameter) 연산자 함수는 operator 키워드를 사용해 연산자를 오버로딩하며, 오버로딩할 연산자는 operator 키워드와 공백없이 연결되어야 한다. ● 멤버함수로 오버로딩 # include class Foo { private: int xpos; int ypos; publi..