Java 혁신의 숨은 공신, JVM의 구조와 동작 원리

Java의 탄생 1995년, Java가 세상에 공개됐다. Java가 처음 세상에 공개된 그 날부터 지금까지 Java는 현대 프로그래밍 언어 전반에 큰 영향을 끼치고 있다. Java가 이후 최신 소프트웨어 개발에 대한 기준이 될 혁신적인 개념들을 내장하고 있었기 때문이다. Java의 어떤 부분이 어떻게 혁신적이길래 2020년대인 지금까지 영향을 끼치고 있을까. 이를 소개하자면 간단하게 소개할 수 있겠지만, Java에 왜 그런 특징들이 생겼는지까지 이해하려면 Java와 떼려야 뗄 수 없는 JVM에 대해서도 알아야 한다. 왜냐하면 JVM이 동작하는 원리가 Java의 특징을 정의하고, 그 특징들이 현대 프로그래밍 언어들에 큰 영향을 주었기 때문이다. 이에 대해 알게 된다면, 자연스럽게 JVM이 존재하는 이유 또..

OSI 참조 모델 완전히 파헤치기

그 동안 운영체제에 관한 글만 써서 포스팅하기 적당할 것 같은 다른 분야를 찾다보니 네트워크와 관련된 내용을 써보는 것이 좋을 것 같아서 이번에는 네트워크의 가장 기본적인 모형인 OSI 참조 모델에 대해 글을 써보려고 한다. 완전히 기본적인 개념이기도 하고, OSI 참조 모델이 처음 발표된 지는 거의 35년이나 흘러서 이곳 저곳 OSI 참조 모델에 대한 글을 쉽게 찾아볼 수도 있기 때문에 스킵하고 넘어갈까 생각도 했지만 아무래도 쓰는 편이 좋을 것 같다고 생각했다. 왜냐하면, 기본이 가장 중요하다는 말도 있듯이 OSI 참조 모델에 관련된 내용은 면접 질문에서 나올 가능성이 매우 높을 뿐만 아니라 정보처리기사 시험에도 필수적으로 출제되는 부분이기 때문이다. OSI 참조 모델 흔히들 OSI 7계층 모델, 또..

운영체제의 CPU 스케줄링

이전 포스팅과 연결되는 부분이 많아서 이전 포스팅을 읽고 오면 이해하기 좋습니다. 이전 포스팅에서 운영체제의 스케줄링 방식과 Context Switching에 대한 글을 쓰겠다고 했다. 따라서 이번 포스팅의 주제로는 스케줄링 알고리즘을 선정했다. 스케줄링? 먼저 스케줄링이 무엇이고, 왜 이런 게 필요한지 알아보도록 하자. 사실 이번 글 뒷부분에서 언급할 여러 가지 스케줄링 알고리즘을 달달달 외우는 것보다 어쩌면 스케줄링이 왜 필요한지 그 이유를 아는 것이 더 중요할 수도 있다. 스케줄(Schedule)이라는 단어에서 알 수 있듯, 운영체제에서 말하는 스케줄링은 운영체제가 CPU의 자원을 어떤 프로세스에게 할당해 줄 지 그 일정을 짜는 것이라고 이해하면 쉽다. 이전 포스팅에서 언급했던 대로 프로세스 간의 ..

프로세스와 스레드의 차이

CS 첫 포스팅으로는 프로세스와 스레드의 차이에 대해 설명하는 글을 쓰기로 결정했다. 프로세스와 스레드, 그리고 프로그램이 작동하는 방식에 대해서 잘 이해하고 있는지 확인하기 위해 기술면접에서 단골 질문 사항으로 나온다고 하고, 이 부분이 운영체제 과목에서도 기본으로 다루고 갈 정도로 중요하기 때문이다. 따라서 이번 글에서는 프로세스와 스레드의 차이에 대한 글뿐만 아니라, 프로그램/프로세스/스레드 모두에 대한 설명을 쓰게 될 것 같다. 프로세스와 스레드에 대한 정의 먼저 프로세스와 스레드가 무엇인지 정의부터 살펴보고 가자. 프로세스: 운영체제로부터 자원을 할당받은 작업의 단위. 스레드: 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위. 일단 정의만 들어보면 무슨 소리인지 쉽게 이해하기 힘들다. 정의..