Java & Kotlin

[JAVA] 자바 데이터 타입과 변수

0. 들어가면서 이번 시간에는 자바 데이터 타입, 변수와 배열에 대해 공부해보려고 합니다. 기초적인 내용이니, 편하게 읽어보시면 좋을 것 같습니다. 1. 프리미티브(Primitive) 타입 종류와 값의 범위 그리고 기본 값 자바 데이터 타입에는 크게 원시 타입(Primitive type)과 참조 타입(Reference type)이 존재합니다. Primitive type은 기본값이 존재하는 데이터 타입으로 Null이 존재하지 않습니다. 그래서 의도적으로 Wrapper 클래스를 통해 Primitive type을 Reference Type으로 관리하면서 의도하지 않은 값이 들어가거나 값이 제대로 들어가지 않았을 땐 NullPointerException 등으로 예외 처리를 할 수 있게 하기도 하죠. 한편, Pr..

2021.06.19 게시됨

Java & Kotlin

[JAVA] 예외 처리를 어떻게 해야할까? - (1)

1. 예외 처리 Try/Catch문을 사용하는 가장 큰 목적은 예외 처리(Exception Handling)를 하는 데 있습니다. 예외 처리란 두 가지 방식으로 수행할 수 있는데, 첫번째가 전통적인 방식인 조건문을 이용하는 것이고 두번째 방법이 try-catch문을 이용하는 것입니다. 하지만, 제 생각으로는 예외 처리를 IF문으로 한다는 것은 최대한 "지양"해야 하는 방향이라고 생각합니다. 그 이유는 아래와 같으며, 글을 풀어나가며 구체적으로 설명하려고 합니다. 첫째, try-catch문에서는 예외가 발생했을 때 그 즉시 해당 블록이 종료되고 catch 블록으로 제어가 이동합니다. 하지만 if-else로 에러를 처리할 경우에는 에러가 발생한 객체에 대하여 수명이 유지되기 때문에 에러를 처리하는 동안에도 ..

2021.06.17 게시됨

Java & Kotlin

[JAVA] JVM과 자바 코드의 동작

1. JVM이란 무엇인가? JVM(JAVA Virtual Machine)은자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행해주도록 하는 가상 머신입니다. JVM은 JAVA와 OS 사이에서 중개자 역할을 하는데, 덕분에 JAVA가 OS에 구애받지 않고 재사용을 가능하게 해줍니다. 가상 머신 도입의 가장 근본적인 이유이기도 하죠. 한편, 또 하나의 JVM의 중요한 역할 중 하나는 Garbage Collection(GC)을 통한 메모리 관리인데요. GC(Garbage collection)에 대해서는 아래 포스팅에서 자세히 정리했습니다. [JAVA] 가비지 컬렉션(Garbage Collection, GC)에 대한 이해 0. 들어가기 전에 자바 가비지 컬렉터(GC)에 대해 설명하기 전에 ..

2021.06.17 게시됨

CS/OS

[운영체제/OS] 디스크 구조와 I/O 작업 스케줄링

💡0. 들어가면서 이전 포스팅까지 OS의 메모리 관리 기법에 대해 살펴봤습니다. 험난한 길이었습니다. 이번 시간부터는 OS가 어떻게 디스크를 탐색하는지에 대해 공부해보려고 하는데요. 먼저 구글에 '하드디스크'라고 검색해보면 아래와 같은 사진들을 보실 수 있습니다. 그렇다면 우리의 OS는 어떤 방식으로 디스크의 데이터를 읽고 저장할 수 있을까요? 📒 1. 디스크의 구조 아래는 일반적인 디스크의 구조입니다. 디스크는 크게 Cylinder, Platter, Track, Sector, Head로 구성되어 있습니다. Cylinder는 우리말로 원통이고 Platter는 평평한 원판을 의미하죠? 그래서 N장의 Platter를 겹쳐놓은 것을 Cylinder라고 하며, 각 Platter에 대해 Head가 존재하는 구조라..

2021.06.14 게시됨

CS/OS

[운영체제/OS] 프레임 할당(Frame allocation)과 Page fault 관련 기타 이슈들

📒 1. 프레임의 할당 이전의 많은 포스팅에서 가상 메모리의 관리는 애초에 물리적 메모리가 가상 메모리보다 훨씬 작기 때문에 필요한 개념이라고 말씀드렸는데요. 따라서 각 프로세스는 자신이 필요로 하는 "최소한의" 페이지만 사용하는 것이 합리적이라고 볼 수 있습니다. 그렇다면 각 프로세스는 얼마만큼의 프레임을 할당받아야 감당할만큼(?)의 페이지 폴트를 일으키면서 전체 프로세스가 원활하게 돌아갈 수 있을까요? 이 역시 명확한 기준은 없지만 크게 두 가지 방법이 존재합니다. ✅ 1) Local Replacement 이 방법은 프레임을 어떤 프로세스에게 고정 할당(Fixed Allocation)하는 개념에서 시작합니다. 애초에 프로세스 별로 할당된 프레임의 크기가 고정되어 있기 때문에, 페이지 폴트가 발생하면 ..

2021.06.14 게시됨

CS/OS

[운영체제/OS] 여러가지 페이지 교체 정책에 대해

0. 들어가면서 지난 시간에 가상 메모리의 기본적인 개념에 대해 공부했고, 한정된 물리 메모리에 많은 양의 논리 메모리를 로드하기 위한 디맨드 페이징(Demand Paging) 전략에 대해 살펴봤습니다. 디맨드 페이징(Demand Paging)은 필요한 페이지만 물리 메모리에 올려두고, 물리 메모리에 가용한 공간이 없으면 스와핑(Swapping)을 통해 페이지를 교체하는 컨셉을 가진 방법이었습니다. [운영체제/OS] 메모리 관리 - 디맨드 페이징(Demand Paging)과 Page Fault Issue 💡 1. 리마인드 가상 메모리는 Virtual 또는 Logical Memory라고 부르는데, 이전에 메모리 관리를 공부하면서 사용해왔던 개념입니다. 멀티프로세싱 환경에서 각 프로세스는 자신의 가상 메모리..

2021.06.14 게시됨

CS/OS

[운영체제/OS] 메모리 관리 - 디맨드 페이징과 페이지 부재(Page Fault) Issue

💡 1. Remind 가상 메모리는 Virtual 또는 Logical Memory라고 부르는데, 이전에 메모리 관리를 공부하면서 사용해왔던 개념입니다. 멀티프로세싱 환경에서 각 프로세스는 자신의 가상 메모리 공간을 갖고 있고, 런타임에 물리적 메모리 공간에 올려서 사용하는 것이었죠. 가상 메모리 사용의 가장 핵심적인 목표는 프로그래머가 물리적 메모리 공간에 대해 신경쓰지 않고, 논리적 메모리에 대해서만 고민하게 하는 것입니다. 이를 위해 모든 가상 메모리는 통째로 물리적 메모리에 올려지는 것이 아니라, 공유 가능한 부분은 공유하고 / 실제 사용하는 영역만 물리 메모리에 올려집니다. 이를 통해 엄청나게 많고 커다란 프로세스들을 한정된 물리적 메모리 공간 안에서 돌아갈 수 있는 것이죠. 다시 말해, "RAM..

2021.06.14 게시됨

CS/OS

[운영체제/OS] 메모리 관리 - 세그멘테이션(Segmentation)과 페이징 기법

💡 0. 들어가면서 지난 글에서는 메모리 관리 기법 중 페이징 기법에 대해 공부했습니다. 페이징 기법은 논리적 메모리를 페이지 단위로 쪼개고, 물리적 메모리를 프레임 단위로 쪼개서 이를 대응하는 방식으로 연속적이지 않은 주소 공간의 매핑이 가능했습니다. 하지만 페이징 기법에서는 메모리 접근에 대한 오버헤드 문제와 커다란 페이지 테이블을 관리하는 메모리 이슈가 존재했고, 이를 해결하기 위한 TLB 레지스터와 Multi-level paging 등의 개념에 대해서 다루게 되었습니다. [운영체제/OS] 메모리 관리 - 페이징(Paging) 기법 📖 0. 들어가면서 지난 포스팅에서 공부한 Partitioning, Buddy system 등의 메모리 관리 기법은 프로세스의 논리적인 메모리 주소를 물리적인 메인 메모..

2021.06.14 게시됨

CS/OS

[운영체제/OS] 메모리 관리 - 페이징(Paging) 기법

📖 0. 들어가면서 지난 포스팅에서 공부한 Partitioning, Buddy system 등의 메모리 관리 기법은 프로세스의 논리적인 메모리 주소를 물리적인 메인 메모리에 연속적인 Mapping을 전제했습니다. [운영체제/OS] 메모리 관리 - 파티셔닝(Partitioning)과 버디 시스템(Buddy system) 이번 포스팅에서는 메모리 관리를 실전(?) 방법들에 대해서 공부하려고 합니다. 단, 지금부터 소개하는 방법들은 기본적으로 프로세스의 크기만큼 물리 메모리에 충분한 공간이 있음을 가정합 studyandwrite.tistory.com 하지만 지금부터 알아 볼 페이징(Paging) 기법은 물리적인 주소가 연속적이지 않은 상황에서도 매핑이 가능합니다. 어떤 방식인지 구체적으로 알아보도록 하겠습니다..

2021.06.14 게시됨

CS/OS

[운영체제/OS] 메모리 관리 - 파티셔닝과 버디 시스템(Buddy system)

이번 포스팅에서는 메모리 관리를 실전(?) 방법들에 대해서 공부하려고 합니다. 단, 지금부터 소개하는 방법들은 기본적으로 프로세스의 크기만큼 물리 메모리에 충분한 공간이 있음을 가정합니다. 이전 시간에 스와핑에 드는 Transfer time이 꽤 크다는 것을 이야기했었는데 지금은 이 부분을 고려하지 않겠다는 뜻입니다. 이전 포스팅을 아직 안 보신 분은 한 번 보고 오시면 이해가 더 편하실 것 같습니다. [운영체제/OS] 메모리 관리(Memory Management) - 물리적, 논리적 주소 공간과 스와핑(Swapping) 💡 0. 들어가면서 이전 포스팅까지 CPU 스케줄링, 멀티프로세싱과 멀티쓰레딩, 그리고 동기화 및 데드락 이슈에 대해 공부했습니다. 메모리 관리(Memory Management)는 하나..

2021.06.14 게시됨