전체 글 51

[OS 공룡책] 6. Synchronization Tools

동시 접근이 일어나면 항상 발생하는 문제가data inconsistency - 일관성 문제이다 JVM에서 공부했던 내용이라 간략하게만 언급하면스레드는 메모리를 공유하기 때문에 - 정확하게는 힙 영역을 공유하기 때문에 발생한다 c언어 예시이긴 하지만sum++이 결국 sum (현재 값을 읽고->증가된 값 쓰기) 로직이니까동시에 접근하는 값이 최신 값이 아니게 되면서 정합성이 깨지기 시작한다 자바 고급1에서 너무 많이했으니 패스 Race Condition한국어로 교착상태여러개의 프로세스가 하나의 값 수정을 할때 발생하는 문제 교착상태가 발생하는 코드 구역을 ciritical section이라고 부르는데세부적으로 코드 영역을 4가지로 구분한다 여기서는 아직 락을 배우지 않았지만 언급하겠다 - entry..

CS/OS 2026.01.09

[OS 공룡책] 5. CPU Scheduling

하나의 cpu를 왜 sharing 해야하는지는 처음에 알아봤다복습해보면전제는 cpu는 굉장히 빠르기 때문에 처리량에 비해 놀고 있는 상황이고,cpu utilization 즉 사용량을 극대화 하기 위해 여러가지 프로세스를 번갈아 가며 처리하기 위함 이는 기본적으로 IO bound가 cpu bound보다 훨씬 길기 때문에 발생한다 이제 cpu를 어떤 프로세스에게 어떻게 분배할것인가? 가 스케줄링이다좀더 구체적으로 ready queue에 들어가있는 프로세스들에게 어떻게 할당할것인가? 크게 두가지가 있는데- FIFO Queue- Priority Queue 그리고 구체적인 방법론을 이해하기 위해- Preemptive 선점형- Non-preemptive 비선점형개념이 나온다 이게 말이 좀 헷갈리는데주체는 cpu ..

CS/OS 2026.01.09

[OS 공룡책] 4. Thread & Concurrency

하나의 프로그램에서도 여러가지 동작을 동시에 수행할 수 있다는 점에서 스레드가 필요하다 spring을 배우면서 그렇게 했던 스레드풀, 스택영역 등..이 이제 여기와 관련된 내용 멀티스레딩을 하면 좋은점은- Responsiveness 연속적인 응답을 가능하게 한다- Resource Sharing 스레드는 프로세스와 달리 메모리 공간을 공유하기 때문에 shared-memory나 message passing 방식보다 훨씬 쉽다 좀더 정확히는 JVM 구조 공부했을 때처럼 힙영역, 메서드 영역을 공유한다고 보면 될 것 같다. (Thread Local같은 예외도 있다)- Economy 프로세스 생성보다 훨씬 저렴하다 context swithching보다 thread switching이 o..

CS/OS 2026.01.08

[OS 공룡책] 3. Process

OS를 다 까먹어서 복습해보기로.1, 2챕터는 인트로여서 정리하지는 않겠다 프로세스 너무 많이 했다.프로세스 : 실행중인 프로그램 이제 OS가 프로세스를 관리해주야 하는데 어떻게 관리할것인가? 가 관건이다 이를 이해하기 위해 프로세스의 생명주기를 이해해야 한다 프로세스 생명주기 - NEW 프로세스가 생성된 상태- RUNNING 프로세스가 CPU를 점유해서 해당 명령어를 CPU가 처리하고 있는 상태- WAITING CPU가 다른 처리를 하고 있어서 기다리고 있는 상태 EX) 프로세스1이 running 상태일때 프로세스2가 기다리고 있는 상황 EX2) IO를 일으켜서 점유를 반납하는 상황- READY 레디큐에서 CPU 점유를 대기하고 있는 상황 EX) IO를 일으키고 ..

CS/OS 2026.01.07

[JAVA] 알고리즘 고득점 kit 스택 / 큐 + 정렬

또 오랜만에 자바다 정렬 문제 들어가기 전에 자바 정렬 정리// 배열 오름차순Arrays.sort(arr);// 배열 내림차순 (객체만)Arrays.sort(arr, Collections.reverseOrder());// 배열 커스텀 정렬Arrays.sort(arr, (a, b) -> a - b);// 두개 key로Arrays.sort(arr, (a, b) -> { if (a[0] == b[0]) return a[1]-b[1] return a[0] - b[0] });// 리스트 오름차순Collections.sort(list);list.sort(Comparator.naturalOrder());// 리스트 내림차순Collections.sort(list, Collections.reverseO..

ALGORITHM 2025.11.06

[PYTHON] 프로그래머스 고득점 kit

정렬k 번째 큰 수https://school.programmers.co.kr/learn/courses/30/lessons/42748쉬운문제 기억할 포인트- 파이썬에서는 substring 사용할때 슬라이싱 array[i:j]-> i 인덱스부터 j-1까지 문제에서는 인덱스+1 되어 있어서 i-1 : jdef solution(array, commands): answer = [] for i, j, k in commands: substring = array[i-1:j] substring.sort() answer.append(substring[k-1]) return answer 가장 큰 수https://school.programmers.co.kr..

ALGORITHM 2025.10.24

[JVM 밑바닥까지 파헤치기] 2장 자바 메모리 영역과 오버플로우

자바 스레드, 동시성 강의와 책을 병행하려고 한다. 런타임 데이터 영역https://gothax.tistory.com/48강의에서 본 자바 메모리 영역을 이렇게 봤었다.책을 읽어보니 조금 더 자세하게 나와있었다. 프로그램 카운터 (Program Counter Registry)이부분이 위 그림에 안나와 있었다 편의상 생략된듯 pc register는 작은 메모리 영역으로현재 실행중인 스레드의 바이트코드 줄 번호 표시기라고 할 수 있다. 스택 영역에서 메서드를 실행할때마다 스택 프레임을 쌓고, 코드를 한줄한줄 실행한다고 했던거 기억이 나는가?여기서 그 한줄한줄 실행할때 어디인지를 기록하는 것 좀더 이론적으로바이트코드 인터프리터가 이 카운터의 값을 바꿔 다음 실행할 명령어를 선택하는 식으로 작동한다.이를 ..

SUMMARY/JAVA 2025.08.15

[JAVA 고급1] 3. 스레드 제어와 생명주기 1

스레드 생명 주기 OS에서도 많이 본 그림인데 하나씩 살펴보면 - New 스레드가 생성되었지만 시작되지 않은 상태 start 메서드를 호출하지 않은 상태이다. - Runnable 스레드가 실행중이거나 실행될 준비가 된 상태 start 메서드를 호출하면 해당 상태로 들어간다 OS 스케줄러가 각 스레드에 CPU 시간을 할당해 실행하기 때문에 (time waiting) Runnable 상태 스레드는 실행 대기열에 포함되었다가 차례로 CPU에서 실행된다. - 자바에서는 이를 구분할 수 없다 - 일시 중지 상태들 - Blocked : 스레드가 락을 기다리는 상태 (뒤에서 synchronized와 모니터 락을 배운다) - Waiting : 스레드가 무기한으로 다른 스레드의..

SUMMARY/JAVA 2025.08.13

[JAVA 고급1] 2. 스레드의 생성과 실행

Java 메모리 구조 Java 메모리는 3가지 영역으로 구성되어 있다 - 메서드 영역 Method Area 프로그램을 실행하는데 필요한 공통 데이터를 관리한다 그러므로 프로그램의 모든 영역에서 공유 안에 있는 3가지는 각각 클래스 정보 : 클래스 실행 코드, 필드, 메서드, 생성자등 모든 실행코드 static 영역 : static 변수 보관 런타임 상수 풀 : 공통 리터럴 상수 - 스택 영역 Stack Area 스레드 별 하나의 실행 스택이 생성된다 (스레드 수 만큼 스택이 생성된다) 네모칸 하나가 스택 프레임이고 지역 변수, 중간 연산 결과, 메서드 호출 정보를 포함한다 메서드를 호출할 때 마다 하나의 스택 프레임이 쌓이고, 메서드가 종료되면 해..

SUMMARY/JAVA 2025.08.11