본문 바로가기

전체 글132

[운영체제] Thread Concurrency동시성을 구현하는 두 가지 방식이 있다. ✅Option1 : 프로세스 기반 동시성- 장점) 추상화가 필요 없다. OS가 제공하는 프로세스만으로도 구현이 가능하다.- 단점) 통신 오버헤드가 크고, 문맥 전환 비용이 크다. (왜냐하면 프로세스는 독립된 메모리 공간을 가지기 때문에 스위칭을 할 때 레지스터 저장 및 복구, 메모리 매핑 전환 등이 발생하기 때문이다.) ✅Option2 : 스레드 기반 동시성- 장점) 가볍고, 데이터 공유가 쉽다. (메모리를 직접 공유하기 때문이다.)- 단점) 동기화 문제가 발생할 수 있다.Multi-threaded program그렇다면 멀티스레드를 가지고 있는 프로그램들은 어떤 구조로 이루어져 있을까. - Producer/consumer: 데이터를 만들어내는 .. 2025. 10. 4.
[운영체제] Virtual Memory Virutal Memory Intuition가상 메모리: 사용하지 않는 페이지는 디스크에두고, 필요할 때만 메모리에 적재하여 실제 메모리보다 더 큰 프로세스를 실행할 수 있도록 만드는 메모리 관리 비법→ 가상 메모리를 이용한다면 모든 페이지가 RAM에 없어도 프로세스 실행이 가능하다. 필요조건:- OS는 각 페이지가 메모리에 있는지, 디스크에 있는지 알아야한다.- 어떤 페이지를 메모리에 둘지, 디스크로 내릴지 교체 정책이 필요하다 (ex: LRU, FIFO) 가상 주소 공간의 각 페이지는 3가지 상태 중 하나이다:- Physical main memory : 작고 빠르지만 비싸다.- Disk: 크고 싸지만 느리다.- 없음: 에러 PTE: 페이지 테이블을 구성하고 있는 각각의 행들- present = 1 :.. 2025. 9. 30.
[운영체제] Multiprocessor Scheduling 멀티프로세서 구조단일 CPU 시스템에서는 하드웨어 캐시 계층이 존재한다. 이 캐시는 프로그램을 빠르게 실행하기 위해 존재한다.(캐시란, 메인 메모리에서 자주 사용되는 데이터의 복사본을 저장하는 작고 빠른 메모리이다.) 자주 접근되는 데이터를 캐시에 임시로 가져다 둠으로써 시스템은 크고 느린 메모리를 빠른 메모리처럼 보이게 하는 것이다. 캐시는 지역성에 기반한다.시간 지역성: 데이터가 한 번 접근되면 가까운 미래에 다시 접근되기 쉽다.공간 지역성: 프로그램이 주소 x의 데이터를 접근하면 x 주변의 데이터가 접근되기 쉽다.만약에 하나의 시스템에 여러 프로세스가 존재하고 하나의 공유 메인 메모리가 있다면 어떻게 될까. 다음은 멀티프로세서에서 발생할 수 있는 문제점 중 하나이다.CPU0에서 실행 중인 프로그램이.. 2025. 9. 17.
[운영체제] Scheduling 개념- 일련의 프로세스들이 실행하는 상황을 워크로드(Workload)라고 한다.각 작업들에는 도착 시간(arrival time) 과 실행 시간(run time) 같은 정보가 있다.프로세스는 실행 도중에 CPU 작업과 입출력(I/O) 작업을 번갈아 수행하며, 이에 따라 Ready 상태와 Blocked 상태를 오가게 된다. - 여러 프로세스들 중에 어떤 것을 CPU에 할당할지 결정하는 로직을 스케줄러(Scheduler)라고 한다. - 스케줄링의 품질을 평가하는 기준을 Metric이라고 한다.선입선출(FIFO)가장 기초적인 알고리즘 중에 선입선출(First In First Out, FIFO)가 있다.위의 간단한 예시를 통해 더 알아보자.현재 작업 A, B, C는 거의 동시에 도착했다.(T arrival = 0.. 2025. 9. 16.
[운영체제] Limited Direct Execution Limited Direct ExecutionCPU의 성능을 높일 수 있는 방법으로는 무엇이 있을까? 프로그램을 CPU 상에서 직접 실행(Direct Execution)하는 것이다.의미: 사용자 프로세스를 운영체제가 하드웨어 위에서 직접 실행하게 하는 방식방법: OS가 프로세스를 생성한 뒤 그 시작 지점(ex: main() 함수)으로 제어를 넘겨준다.그러나, 이런 직접 실행에 문제점이 있다.제한된 동작을 할 수 있다는 것프로세스가 무한히 실행될 수 있다는 것느린 동작을 할 수 있다는 것이를 해결하기 위한 방법으로 제한된 직접 실행(Limited Direct Execution)이 있는 것이다.의미: 프로세스를 직접 실행하되, OS와 하드웨어가 일부 제어권을 유지하는 방식.문제점1 - Protection어떻게.. 2025. 9. 13.
[Android] 잡았다 리컴포지션! (Layout Inspector, Compose Compiler Metrics) 터닝에서 4차 프린트가 끝나고 리팩토링을 진행하기로 했다.➡️터닝 레포지토리: https://github.com/teamterning/Terning-Android 어떤 리팩토링을 진행할지 회의를 했는데, 다같이 진행하기 좋은 리팩토링은 "리컴포지션 잡기"라고 생각했다.따라서 각자 구현한 뷰들의 리컴포지션 여부를 파악하고 이를 다양한 방법으로 개선해보기로 했다. 그 해결방법을 간단하게 소개해보고자 한다!위 사진은 지금까지 터닝의 리팩토링 과정을 정리한 표이다.한번 쓰윽 구경하고 가도 좋을 것 같다:)이벤트 파라미터 분리리컴포지션이 발생하는 부분을 파악하기 위해 Layout Insepctor를 활용하였다.Layout Insepctor는 상단 Tools를 클릭하면 바로 확인할 수 있다.그럼 화면에 이벤트가 발.. 2025. 9. 5.
[운영체제] Introduction to Operating Systems Operating System운영체제란, 하드웨어를 애플리케이션에 유용한 형태로 변환하는 소프트웨어를 의미한다. 프로그램이 실행될 때, 프로세서는 명령어를 반입(fetch)하고, 해석(decode)하고, 실행(execute)한다.이러한 방식을 반복하는데, 이것이 바로 VonNeumann컴퓨팅 모델의 기초이다. 이렇듯, 프로그램 간의 메모리 공유를 가능하게 하고, 장치와 상호작용하며 다양한 일을 할 수 있게 해주는 소프트웨어가 바로 운영체제인 것이다. 운영체제에 문제가 생긴다면, 컴퓨터 시스템에 문제가 생기는 것이기에 매우 중요하다! Abstraction (추상화)컴퓨터에는 물리적으로 존재하는 자원이 있다. Processor, Memory, Disk들이 해당한다. 운영체제는 이런 물리적 자원들을 추상화하.. 2025. 9. 4.
[DroidKaigi] CMP로 iOS 첫 빌드 도전기 (컨트리뷰션) 오늘은 필자의 두 번째 컨트리뷰션 도전기에 대해 작성해보려고 한다. DroidKaigi의 앱 기여가 시작되고 있다는 소식을 접하고, 관심이 생겨서 이슈들을 눈여겨 보고 있었다.기존에 있던 이슈들은 다른 분들이 이미 손을 드셔서, 남은 것 중에 보다가 CMP 환경에서 ContributorsScreen으로 네비게이션하는 이슈를 발견하게 되어 지원하게 되었다! 비교적 간단한 이슈였지만, CMP 구조를 파악하고 iOS를 빌드해보는 의미 있는 경험이었기에 기록해본다. 💡해당 이슈는 아래에서 확인이 가능합니다. 【ComposeMultiplatform】Implement the transition to the ContributorsScreen by leeeyubin · Pull Request #497 · DroidK.. 2025. 9. 1.
[Kalendar] KMP에 Typograpy 적용하기 유어슈 동아리에서 캘린더 라이브러리를 KMP로 만드는 프로젝트를 진행 중이다. KMP의 K와 Calendar를 합쳐서 Kalendar의 이름이 탄생하게 되었다. 이 프로젝트를 진행하게된 목표는 Compose Multiplatform(iOS, Desktop 포함) 환경에서 플랫폼별 의존성 관리 능력을 향상시키고, 배포 과정을 경험해서 실제 오픈소스 프로젝트를 완성하기 위함이다!총 두 달 동안 진행될 예정이며, 각 기능을 스프린트 별로 나누어 진행하고 있다.캘린더 디자인의 경우 유어슈 디자인 팀에 문의하여 디자인을 받았다. Material을 참고문서로 보냈기 때문에 Material과 디자인이 유사하다. 이번에 내가 담당한 부분은 디자인시스템을 구현하는 것이다.KMP 환경에서의 Typograpy 적용 과정을 .. 2025. 8. 18.
[DroidKnights] Retrofit -> Ktor 마이그레이션 (컨트리뷰션) 오늘은 필자의 "첫 컨트리뷰션 도전기"에 대해 적어보고자 한다. 항상 오픈소스에 기여를 하고 싶다는 생각이 있어서 여러 오픈소스의 이슈들을 주의깊게 보고 있었다. 그러다 마침 '국내 최대 규모 안드로이드 컨퍼런스 드로이드나이츠 앱'에서 KMP로 마이그레이션하면서 여러 이슈들이 올라온 것을 보았다. 이미 UI를 다루는 이슈들은 대부분 다른 분들이 하겠다고 하셔서 남아 있는 이슈들 중에 골랐다. Koin으로 마이그레이션 하는 이슈와, Ktor로 마이그레이션 하는 이슈가 중에 고민이 되었다. Koin은 저번에 마이그레이션을 한 경험이 있었기 때문에 이미 알고 있는 이슈보다는 새로운 기술에 도전해보면서 내 스스로도 성장을 하고 싶어 Ktor 마이그레이션 이슈를 고르게 되었다! 💡해당 이슈는 아래에서 확인이 가.. 2025. 5. 28.
[CS] Kotlin과 Java의 동일성, 동등성 이번에는 객체 공부를 할 때 쉽게 헷갈릴 수 있는 동일성과 동등성에 대해 공부해 보았다. 또한 Kotlin과 Java에서는 어떻게 다르게 쓰이는 지도 정리했다.우선, 이름부터 헷갈리기 쉬운 동일성과 동등성의 개념에 대해 알아보자. 동일성Identity, 영어로 하면 이해기 쉽다. 객체의 메모리 내 주소값이 같은지 식별한다.즉, 내용이 같더라도 주소가 다르다면 다른 객체로 판단하는 것이다. 동등성Equality, 논리적으로 같은 지위를 지녔는지 확인하는 것이다.즉, 변수가 참조하고 있는 객체의 주소가 서로 다르더라도 내용만 같으면 두 변수는 동등하다고 본다. Java의 동일성, 동등성그럼 Java에서는 동일성과 동등성이 어떻게 판단되는지 알아보자.String str1 = new String("Bona");.. 2025. 5. 21.
[Server] Kotlin SpringBoot 프로젝트에 ktlint 적용하기 이번에 Kotlin으로 Spring Boot를 개발하는 프로젝트에 들어가게 되었다. 이에 Kotlin 관련 코드 컨벤션을 정하면 좋을 것 같다는 이야기가 나왔고 이를 효율적으로 해주는 ktlint 설치를 담당하게 되어 이를 정리해보고자 한다.ktlint ktlint란, Kotlin 코드의 스타일을 자동으로 검사하고 포맷팅해주는 도구이다.이를 통해, 코드를 깔끔하게 유지하고 팀 스타일 가이드를 지킬 수 있다는 장점이 있다. 📍ktlint는 pinterest의 오픈소스를 대부분 사용한다고 한다. GitHub - pinterest/ktlint: An anti-bikeshedding Kotlin linter with built-in formatterAn anti-bikeshedding Kotlin linter.. 2025. 5. 5.