다중 프로그래밍을 실현하기 위해 메모리에 여러 개의 프로세스들이 동시에 올라와 있어야한다. 그러나, 실제 프로그램의 크기가 컴퓨터에서 사용하는 메모리의 크기보다 크다면 어떻게 될까 ? 생각의 전환 프로그램을 실행하는데 얼마나 많은 메모리가 필요한가 ? ↓ 프로그램을 실행하는데 필요한 최소메모리는 얼마인가 ? ( 프로그램에서 메모리 접근은 순차적이고 지역화되어있어서 훨씬 적은 메모리로도 충분하다. ) 가상메모리란 ? 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법이다. 이렇게 함으로써 프로그램이 물리메모리의 크기보다 커져도 된다. 물리메모리로부터 사용자 관점의 논리메모리를 분리시켜 메인 메모리를 균일한 크기의 저장공간으로 구성된 엄청나게 큰 배열로 추상화 시켜준다. 따라서 프로그..
Semaphore 도 IPC로 분류가 되는데, 앞서 알아봤던 Message Queue, Shared Memory와 같이 서로다른 프로세스간 데이터 전송을 목적으로 둔 것이 아니다. Semaphore 은 프로세스간 데이터를 동기화하고 보호하는데 목적을 둔다. 그런데 왜 IPC로 분류를 할까 ? Semaphore 도 결국 서로다른 프로세스간 통신을 함에 있어서 동기화 문제를 해결하기 위해 사용되기 때문이다. 결국 프로세스간 통신을 함에 있어서 사용되는지 여부가 중요한 것이다. (?) Semaphore 의 과정 - 세마포어 생성 - 임계구역 잠금 - 공유자원 사용 - 임계구역 잠금해제 - 세마포어 제거 위 5가지 과정을 통해 Semaphore을 이용해 서로다른 프로세스간의 통신에서 동기화 문제를 해결한다. 이..
MeroZemory 님의 한마디 ! 공유라이브러리는 가상메모리 상에서는 공유메모리영역에 Load되고, 이 영역은 32bit 운영체제 기준으로 0x80000000 부터 1GB이다. 공유메모리자체는 모든 프로세스가 각각 가지는 것이고, 실제 DLL이 로딩되는건 물리메모리에 한 번 올라간다. 각 프로세스의 공유메모리영역으로부터 저 물리메모리의 DLL 메모리에 매핑된다. ( 페이지 단위로 ) 모든 프로세스가 해당 DLL을 해제하기 전까지 해당 DLL은 물리메모리 상에 유지된다. 공유 라이브러리가 필요한 이유는 무엇일까 ? A) Object 파일은 자체만으로 실행이 불가능하다. 왜냐하면 printf의 구현코드를 모르기 때문이다 ! 그러면 Object 파일을 실행시키고 싶다면 어떻게 해야할까 ? A) printf의..
1. https://github.com/JesusFreke/smali/wiki/smalidea JesusFreke/smali smali/baksmali. Contribute to JesusFreke/smali development by creating an account on GitHub. github.com 위 링크에서 smalidea-0.05를 다운로드 받는다. ( 이후에 나오는 추가적인 버전을 사용해도 된다. ) 2. Android Studio 에서 File - Setup - Plugins - (톱니)Install Plugin from Disk... 를 선택하고 다운로드 받은 smalidea-0.05.zip 파일을 압축을 해제하지 않은상태로 선택한다. 정상적으로 Plugin이 설치되었으면 Andro..
실시간 CPU 스케줄링에는 연성과 경성이 있다. 경성은 지나면 아무의미가 없는 경우이다. 지연시간 최소화 1. 인터럽트 지연시간. 2. 디스패치 지연시간. 이 두가지가 실시간 시스템의 성능을 좌우한다. ( 직접 해볼 수 없기 때문에 와닿지는 않는다 ) 인터럽트 지연시간. - CPU에 Interrupt가 발생한 시점부터 인터럽트 처리루틴이 시작하기까지의 시간. - 인터럽트 지연시간은 정해진시간보다 작아야한다. 주요 원인은 커널 자료구조 갱신동안 Interrupt가 불가능하다는 점 때문이다. 디스패치 지연시간. - 스케줄링 디스패처가 하나의 프로세스를 봉쇄하고 다른 프로세스를 시작하는데 걸리는 시간. ( 얘를 최소화하는 가장 효과적인 방법은 선점형 스케줄링을 적용하는 것이다. ) 근데 결국 Context S..
다중 처리기라는 것은 쉽게 말해 CPU의 역할을 하는 것이 여러 개라는 것이다. 처리기가 여러개이기 때문에 부하분산이 가능하지만, 그에 따라서 스케줄링은 더 복잡해진다. ( 이 전에 설명했던 스케줄링 기법들과 마찬가지로 최선의 해결책이란 존재하지 않는다. 그저 상황에 따를뿐. ) 요즘은 하나의 칩에 여러개의 처리기 코어가 들어가있는 다중코어 프로세서가 많이 사용된다. ( 16코어 8스레드 → 128개의 논리 프로세서 ) - 비대칭 다중처리 (Asymmetric Multiprocessing) : 비교적 간단하다 하나의 처리기를 master로 두어 해당 처리기가 모든 스케줄링결정과 입출력처리, 다른 시스템의 활동을 취급하게한다. 다른 처리기들은 User코드만을 수행한다. 하나의 처리기가 다 처리하기 때문에 ..