전체 글

전체 글

    [운영체제] Contiguous Allocation과 MMU(Memory Management Unit)

    목차 🤔 MMU(Memory Management Unit)란? 💙 연속 할당(Contiguous allocation) 💜 Memory protection fault 🤔 MMU(Memory Management Unit)란? MMU(Memory Management Unit)는 CPU 내부에 탑재되어 논리 주소(Logical Address)를 실제 메모리의 물리 주소(Physical Address)로 변환해주는 하드웨어입니다. 이전 포스팅에 공부했듯이, Execution time binding은 실제로 명령어를 실행하는 시점에 주소 변환을 하는 Address binding 기법입니다. 위 그림에서는 0x198000번지에 저장되어 있는 data에 10을 저장하기 위해 store #98000, 10 명령어를 사용..

    [운영체제] Address Binding - Compile, Load, Execution time binding

    목차 🤔 Address binding이란? 🧡 Compile time binding 💛 Load time binding 💚 Execution time binding 🤔 Address binding이란? 우리가 프로그램을 실행시키면 프로세스가 되어 Main Memory라고 불리는 RAM에 올라갑니다. 이때 메모리 주소는 우리가 프로그래밍을 할 때 사용하던 주소 그대로일 수도 있고, 그렇지 않을 수도 있습니다. 그 이유는 CPU가 만들어내는 가상의 주소인 Logical address(논리 주소)와 실제 메모리 상의 특정 번지를 나타내는 Physical address(물리 주소)를 어떻게 관련지을 것인지에 대한 다양한 방법이 있기 때문입니다. 즉, 프로세스를 메모리에 할당시킬 때, 물리 주소를 언제(When)..

    [Android] This version of the Android Support plugin for IntelliJ IDEA (or Android Studio) 오류 해결

    Android Studio를 잘 사용하다가, 또는 새로운 프로젝트를 열려고 할 때 위와 같은 오류가 발생할 수 있습니다. 해당 오류는 현재 Android Studio의 버전이 Gradle을 감당할 수 없기 때문에 발생합니다. 새로운 프로젝트를 clone했는데 Android Studio의 버전이 낮은 경우 기존 프로젝트에서 다른 사람의 작업을 pull했는데 gradle version이 높아져 있는 경우 이 외에도 다양한 경우가 있을 수 있습니다. 해결 방법은 간단합니다. 상단 메뉴의 Help -> Check for Updates... 를 클릭합니다. Check for Updates... 는 현재 Android Studio가 최신 버전인지 확인하는 기능입니다. 그러면 위와같은 알림이 우측하단에 나타날 것입니..

    [Android] ViewModel + Event Wrapper Pattern 단일 이벤트 처리

    💬 Single Event 처리 ViewModel의 LiveData를 Observe하고 있으며 값이 True로 변경되면 Toast 메시지를 출력합니다. 그러나, 만약, 디바이스 화면을 회전(Configuration)하였더니 Toast가 한 번 더 호출되는 이슈가 발생합니다 이는 Configuration이 발생하면, 기존 Activity가 Destroy되고 화면이 새롭게 그려지면서 onCreate() 콜백 메서드가 다시금 호출되기 때문입니다. ViewModel은 일반적으로 Activity보다 생명주기가 길기 때문에, Activity가 파괴된다고 하더라도 ViewModel 내부의 필드는 그대로 유지됩니다. 그렇기 때문에 LiveData가 감싸고 있는 데이터는 True 상태를 유지하고 있으며, Activity..

    [운영체제] 식사하는 철학자들 문제 (Dining philosophers problem) - Deadlock, Starvation

    목차 🤔 식사하는 철학자들 문제(Dining philosophers problem)란? 💡 문제 해결 방법 🤔 식사하는 철학자들 문제(Dining philosophers problem)란? 식사하는 철학자들 문제(Dining philosopher problem)는 Deadlock과 Starvation을 비유하여 설명하는 좋은 예제입니다. 5명의 철학자가 원탁에 앉아서 식사를 합니다. 애처롭게도, 철학자 사이사이에 젓가락은 하나씩만 주어집니다. 그렇기 때문에 아래와 같은 과정을 통해 식사를 해야 합니다. 1. 철학자들은 일정 시간 동안 생각을 한다. 2. 왼쪽 젓가락이 사용 가능할 때까지 기다린다. 만약 사용 가능하다면 집어든다. 3. 오른쪽 젓가락이 사용 가능할 때까지 기다린다. 만약 사용 가능하다면 집..

    [우아한테크코스 5기] 프리코스 4주차 회고 - Kotlin 안드로이드

    목차 ✏️ 4주차 문제 📃 추가된 요구 사항 🍋 지난 주보다 개선된 점 👋 프리코스를 마무리하며 ✏️ 4주차 문제 미션 - 다리건너기 4주차 미션은 다리 건너기 게임 구현입니다. 위아래 둘 중 하나의 칸만 건널 수 있는 다리를 끝까지 건너가는 게임이다. 위아래 두 칸으로 이루어진 다리를 건너야 한다. 다리는 왼쪽에서 오른쪽으로 건너야 한다. 위아래 둘 중 하나의 칸만 건널 수 있다. 다리의 길이를 숫자로 입력받고 생성한다. 다리를 생성할 때 위 칸과 아래 칸 중 건널 수 있는 칸은 0과 1 중 무작위 값을 이용해서 정한다. 위 칸을 건널 수 있는 경우 U, 아래 칸을 건널 수 있는 경우 D값으로 나타낸다. 무작위 값이 0인 경우 아래 칸, 1인 경우 위 칸이 건널 수 있는 칸이 된다. 다리가 생성되면 플..

    [우아한테크코스 5기] 프리코스 3주차 회고 - Kotlin 안드로이드

    목차 ✏️ 3주차 문제 📃 추가된 요구 사항 🥺 부족했던 부분 🤔 새롭게 알게 된 지식 ✏️ 3주차 문제 미션 - 로또 3주차 미션은 로또 시뮬레이션 구현입니다. 로또 구입 금액을 입력하면 구입 금액에 해당하는 만큼 로또를 발행해야 한다. 로또 1장의 가격은 1,000원이다. 당첨 번호와 보너스 번호를 입력받는다. 사용자가 구매한 로또 번호와 당첨 번호를 비교하여 당첨 내역 및 수익률을 출력하고 로또 게임을 종료한다. 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException를 발생시키고, "[ERROR]"로 시작하는 에러 메시지를 출력 후 종료한다. 만약 금액이 1000원 단위가 아니거나, 로또를 구매할 수 없는 금액이라면 예외를 발생시키고 프로그램을 종료해야 합니다. 이 외에도 숫..

    [우아한테크코스 5기] 프리코스 2주차 회고 - Kotlin 안드로이드

    목차 ✏️ 2주차 문제 🤔 문제를 풀며 고민해본 내용들 ✨ 보기 좋은 코드가 먹기도(?) 좋다 ✏️ 2주차 문제 미션 - 숫자야구 2주차 미션은 숫자야구 게임입니다. 지난 1주차 미션과 다른 점은 알고리즘 문제가 아닌, 실제로 어떤 큰 기능을 구현해야 한다는 점입니다. 문제를 요약하자면 아래와 같습니다. 플레이어와 컴퓨터가 존재합니다. 컴퓨터는 1부터 9까지의 범위 내에서 랜덤으로 서로 다른 숫자 3개를 만듭니다. ex) 198 플레이어는 컴퓨터의 숫자를 알지 못합니다. 플레이어는 값을 제시해가며 컴퓨터의 숫자를 맞춥니다. 처음에 문제를 접했을 때에는 '어..? 할만 하겠는데?' 라고 생각하였습니다. 하지만 실제로 구현하는 과정에서 이러한 생각은 큰 오산이었다는걸 깨달았습니다. 문제 자체는 간단해보였지만..

    [운영체제] CPU 스케쥴러 (Short-Term, Long-Term, Midium-Term 스케쥴러)

    목차 🤔 CPU 스케쥴러(Scheduler)란? 🖥 스케쥴러의 종류 🕛 단기 스케쥴러 (Short-Term Scheduler) 🕑 장기 스케쥴러 (Long-Term Scheduler) 🕗 중기 스케쥴러 (Midium-Term Scheduler) ⭐ 최신 OS의 스케쥴러 🤔 CPU 스케쥴러(Scheduler)란? CPU는 한 번에 하나의 프로세스만 실행할 수 있습니다. 멀티 프로세서라는 개념이 도입되기도 하였지만, 우리가 실행하고자 하는 프로그램의 개수에 비하면 턱없이 부족한 숫자입니다. 그렇기 때문에 운영체제는 Time Sharing을 통해 하나의 CPU에 대해 여러 프로세스를 비동기적(Concurrent)으로 실행시킵니다. 또한, CPU를 어떻게 하면 가장 효율적으로 사용할 수 있을지 매 순간 고민합니..

    [운영체제] 좀비(Zombie) 프로세스와 고아(Orphan) 프로세스

    ✏️ 좀비(Zombie) 프로세스와 고아(Orphan) 프로세스 좀비(Zombie) 프로세스는 자식 프로세스가 부모 프로세스보다 먼저 종료된 프로세스를 의미합니다. 고아(Orphan) 프로세스는 부모 프로세스가 자식 프로세스보다 먼저 종료된 프로세스를 의미합니다. 💡 프로세스의 Creation & Termination 부모 프로세스는 fork() 시스템콜을 통해 새로운 자식 프로세스를 생성합니다. fork() 시스템콜을 통해 생성된 자식 프로세스는 부모 프로세스를 복제하기 때문에 부모와 동일한 형태를 가집니다. 그리고 이후에 exec() 시스템콜을 호출하면, 생성한 프로세스의 메모리 공간을 새로운 프로그램으로 대체할 수 있습니다. 이러한 프로세스들은 크게 2가지 방식으로 실행됩니다. Parent와 Chi..