Address메모리에는 주소가 있다. 이러한 주소에는 두가지 종류, 가상메모리주소와 물리적 메모리 주소가 있다. 프로그램이 실행되면 프로세스가 되며 독자적인 주소공간이 형성된다. 이때 효율적인 메모리 사용을 위해 CPU는 가상메모리(logical address, virtual address)를 참조하고 가상메모리는 실제 메모리(physical memory)를 참조하게 된다. 이러한 엮여있음을 주소바인딩이라고 한다. 가상 메모리에서 물리적 메모리로 주소변환이 되는 순간은 크게 3가지 시점으로 나누어 볼 수 있다. Compile time binding 컴파일 시점에 물리적 메모리 주소가 결정된다. 가상메모리 주소가 사실상 물리적 메모리 주소. 컴파일 바인딩에 의해 만들어진 코드를 절대코드(absolute..
전체보기
Deadlock데드락은 4가지 조건을 만족시킬 때 발생한다. Mutual Exclusion(상호배제)한 프로세스 자원을 얻으면 해당 자원을 독점적으로 사용한다. No preemption (비선점)자원을 가지면 빼앗기지 않음 Hold and wait다른 자원을 점유하기 위해 기다릴 때는 내가 들고 있는 자원을 점유한 상태에서 기다린다. Circular wait자원을 기다리는 프로세스끼리 참조순환이 되어야만함사각형R은 자원, 동그라미P는 프로세스이다. 작은 점은 자원의 인스턴스 갯수를 의미한다. 화살표를 따라갔을 때 만약 사이클이 형성이 안된다면 데드락이 아니다. 만약 사이클이 있고, 자원당 인스턴스가 하나만 있으면 데드락, 자원당 인스턴스가 여러개라면 데드락 가능성이 있는 상태이다.(만약 자원당 인스턴스..
네이버 블로그/velog 에서 작성했던 내용들을 티스토리로 통합중입니다 :) 동시성 프로그래밍으로 프로그램 구성하기메인스레드의 경우 UI관련 사용자와 직접 상호작용하는 작업을 처리하는데, 데이터변환, 이미지 처리를 메인스레드에서 전부 처리할 경우 약간의 버벅임 문제가 발생한다.메인스레드의 과중화된 업무를 방지하기위해 나온것이 바로 Concurrency(동시성)이다. 동시성 프로그래밍은 여러개의 스레드를 사용함으로써 동시작업을 가능케한다. 하지만 단점도 있는데 바로 thread safety를 유지하기 어렵다는 것이다. 다른 스레드가 작업하는걸 순차적으로 가져와서 지키기가 어려워진다.동시성 환경에서 thread safety를 유지하기 위한 노력으로 애플은 GCD 라이브러리를 만들어서 제공하고 있다.Dispa..
답변요약routes와 onGenerateRoute는 모두 Flutter에서 화면 전환을 관리하기 위한 방법이지만 사용 방법과 유연성에서 차이가 있습니다. routes는 간단한 네비게이션을 설정할 때 사용됩니다. 이는 애플리케이션 내에서 사용할 모든 라우트(경로)를 미리 정의하는 방법입니다. routes 매핑은 애플리케이션이 시작될 때 설정되며, 각 경로에 대해 어떤 위젯을 표시할지 코드를 작성합니다 onGenerateRoute는 더 복잡한 네비게이션 로직을 처리할 때 사용됩니다. 이 메서드는 라우트가 요청될 때 호출되며, 요청된 라우트에 따라 동적으로 위젯을 생성하고 반환할 수 있습니다. 주로 라우트에 데이터 주입을 하거나, 특정 조건에 따라 다른 페이지를 표시해야 할 때 유용합니다 정리하자면 rout..
병행제어MultiLevel Queue란 Ready queue를 여러개로 분할하는 것을 말한다. Multi level Queue에서는 큐의 종류를 두가지로 나눈다. -> foreground / background. 큐를 나누는 기준은 사용자와 ineteract를 하는경우에 foreground 큐에 그렇지 않은 경우에 background 큐에 둔다. forground는 사용자와 interactive하기 때문에 더 많은 CPU time 을 준다. 보통 Time slice로 RR알고리즘을 사용하여 80%는 foreground, 20%는 FCFS 알고리즘으로 background에 할당하여 starvation을 방지한다. Multi level feedback queue 는 기존의 multilevel queue보다 ..
데이터 바인딩이란?클린아키텍쳐에서 마틴 파울러가 말하는 GUI프로그래밍The View is the humble object that is hard to test. The code in this obejct is kep as simple as possible.The presenter is the testable object. Its job is to accept data from the application and format it for presentation so thaat the View can simply move it to the screen.험블오브젝트 패턴에 의해 GUI는 두 개로 나뉜다 바로 뷰(구체적 구현사항)와 프레젠터(테스터블한 행동들)이다.Anything and everything t..
CPU & I/O Burst프로그램 실행은 결국 CPU로 작업하는 단계와 I/O 작업을 하는 단계를 연속해서 지나가는 과정이다. 여기서 CPU burst는 CPU가 기계어를 해석하고 있는 단계, I/O하는 단계를 I/O burst라고 부른다. 프로그램별로 burst의 간격은 다르다. 주로 사람과 ineract하는 프로그램이 위처럼 버스트가 번갈아 등장한다. 연산량을 많이 필요로하는 작업은 CPU Burst의 간격이 넓어지게된다. 만약 I/O를 길게 쓰는 프로그램이 있다면 I/O bound job(process) 라 부르고 , CPU를 길게 쓰는 프로그램을 CPU bound job(process)이라고 부른다. 이 때 Burst Time 종류에 따라 CPU 우선권이 다르게 주어진다. I/O bound jo..
프로세스의 생성프로세스는 부모 프로세스에 의해 만들어져 자식 프로세스가 만들어지는 구조이다 (최상단 부모 프로세스는 init 프로세스로 부팅 과정에서 커널에 의해 생성되는 첫 번째 사용자 공간 프로세스). 이렇게 되다보니 자연적으로 프로세스 트리가 형성된다. 이때 자식 프로세스끼리는 자원을 공유하기도 하지만 보통은 서로 독립적인 프로세스로 CPU를 두고 경쟁하지 기타 자원 공유는 잘 하지 않는다. 프로세스가 생성될 때 자식 프로세스는 부모프로세스의 공간을 복사하고 자신만의 데이터를 위에 올리게된다. 여기서 복제는 fork() 메서드에 의해, 복제한 데이터 위에 자기 데이터를 올리는건 exec() 메서드로 시스템 콜을 하여 새로운 프로그램에 메모리를 올리게 된다.프로세스의 종료 (Termination)..
Rx를 실제 사용한다고 생각해보자. Rx를 사용할 때 순서를 생각해보면 아래와 같이 크게 3가지 과정을 거칠것이다. 1. 먼저 Observable을 만든다.2. 원하는 연산자를 사용한다.3. 구독해서 사용한다. 그렇다면 위에서 반드시 만나는 문제는 어떤 Observable 과 Operator 를 사용할 것이냐이다. 이때 알아야할 지식이 바로 Hot Observable & Cold Observable 개념이다. 두 옵저버블의 특성을 알아보고 실전에서 어떻게 쓰이는지 살펴보자 Unicast vs Muticast먼저 Observable에는 개별적으로 스트림을 던지는 녀석과 던지는 스트림을 공유하는 녀석이 있다. 전자를 Unicast로, 후자인 multicast라고 부르며 Unicast 를 하는 대표적인 예로..
Process 란?Process란 실행중인 프로그램이다. 하드디스크에서 가상메모리를 거쳐 램메모리에 올라온 상태라고 볼 수 있다. CPU의 PC(Program Counter)는 램메모리에 올라온 프로세스의 코드/데이터/스택중 코드 한 부분을 포인팅을 하고 CPU는 PC가 포인팅 해주는 명령어를 읽어가며 작업을 처리한다. 이때 CPU의 PC가 프로세스의 어느부분을 가리키고 있는가, 다시말해 프로세스 전체 작업중 어느 부분을 지나가고 있는가를 프로세스의 문맥(context)이라고 부른다. 항상 메모리에 상주해있던 커널은 프로세스가 하나씩 올라올 때마다 커널의 코드/데이터/스택 중 데이터 공간에서 PCB(Process Control Block)를 통해 프로세스를 관리한다. 또한 특정 프로세스가 운체에게 시스..