일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 알고리즘
- 컴퓨터공학
- 정보처리기사
- github
- 컴퓨터과학
- Public
- 깃
- 프로그래밍
- 공채
- package-private
- 깃허브
- 세마포어
- 운영체제
- 메모리
- 신입사원
- 우리카드
- 이펙티브 자바
- 스프링
- CS
- 신입
- java
- 개발
- 자바
- 스터디
- spring
- Effective Java
- 디지털
- 뮤텍스
- OS
- IT
- Today
- Total
목록전체 글 (116)
주니어 개발자 성장기
Noncontiguous allocation(불연속 할당/ 분산 할당) 하나의 프로세스가 메모리의 여러 영역에 분산되어 올라갈 수 있음 Paging address binding이 복잡해짐 동일한 크기의 페이지로 프로세스를 나눠 메모리에 적재 내부 단편화 발생 가능 페이지 테이블에는 각 페이지가 물리 메모리에 몇 번 프레임에 있는지 원소로 기록되어 있다. 논리 주소는 페이지 넘버($p$)와 오프셋($d$)로 구성되어 있다. Page Table의 구현 프로그램마다 페이지 테이블이 별도로 존재한다. 페이지 테이블은 메인 메모리에 상주한다. 그래서 모든 메모리 접근 연산에는 2번의 Memory access가 필요하다. 페이지 테이블 접근 1회 실제 data / instruction 접근 1회 Page-table..
물리 메모리 할당 메모리는 일반적으로 두 영역으로 나뉘어 사용한다. OS 상주 영역 interrupt vector와 함께 낮은 주소 영역 사용 사용자 프로세스 영역 높은 주소 영역에 있다. 사용자 프로세스 영역의 할당 방법 Contiguous allocation(연속 할당) 각각의 프로세스가 메모리의 연속적인 공간에 적재되도록 하는 것 외부 조각(external fragmentation) / 외부 단편화 분할(partition)의 크기가 작아 프로그램에 할당되지 못해 낭비되는 메모리 공간 내부 조각(Internal fragmentation) / 내부 단편화 프로그램에 할당되었지만 사용되지 않는 메모리 공간 고정 분할 할당(Fixed partition allocation) 물리적 메모리를 몇 개의 영구적 ..
논리 주소(logical address) 프로세스마다 독립적으로 가지는 주소 공간 각 프로세스마다 0번지부터 시작한다. CPU가 보는 주소는 logical address이다. 물리 주소 메모리에 실제 올라가는 위치 주소 바인딩: 주소를 결정하는 것 Symbolic Address -> Logical Address -> Physical Address Logical Address에서 Physical Address으로의 변화 시점(next page)이 언제인가? Compile time binding 물리적 메모리 주소(physical address)가 컴파일 시 알려짐 시작 위치 변경시 재컴파일해야 한다. 컴파일러는 절대 코드(absolute code)생성 현재는 거의 사용되지 않음 Load time bindi..
교착상태(Deadlock) 일련의 프로세스들이 서로가 가진 자원(SW || HW)을 기다리며 block된 상태 자원이란? 하드웨어, 소프트웨어 등을 포함하는 개념 EX) I/O device, CPU cycle, memory space, semaphore 등 프로세스가 자원을 사용하는 절차 요청(Request), 획득(Allocate), 사용(Use), 반납(Release) 발생 조건 Mutual exclusion(상호 배제) 매 순간 하나의 프로세스만이 자원을 사용할 수 있음 No preemption(비선점) 프로세스는 자원을 스스로 내어놓을 뿐 강제로 빼앗기지 않음 Hold and wait(점유 대기) 자원을 가진 프로세스가 다른 자원을 기다릴 때 보유 자원을 놓지 않고 계속 가지고 있음 Circula..
세마포어의 문제점 코딩하기 힘들다. 정확성(correctness)의 입증이 어렵다. 자발적 협력(voluntary cooperation)이 필요하다. 한 번의 실수가 모든 시스템에 치명적인 영향을 줄 수 있다. 실수 예시 Mutual Exclusion이 깨짐 V(mutex); Critical Section P(mutex); Deadlock 발생 P(mutex); Critical Section P(mutex); Monitor 동시 수행중인 프로세스 사이에서 abstract data type의 안전한 공유를 보장하기 위한 high-level synchronization construct 이다. Monitor에서 자체적으로 프로세스의 접근을 관리하기 때문에 세마포어와 달리 개발자가 직접 Lock을 걸 필요가 ..
개요 '식사하는 철학자 문제'라고 하며 철학자는 1. 밥먹기 2. 생각하기 2가지 일을 할 수 있다. 반면 젓가락의 갯수(공유자원)는 제한되어 있다. 이 문제의 해결법을 코드로 살펴보자. Solution A Initialization /* 최초 값은 모두 1이다. */ semaphore chopstick[5]; 철학자는 5명으로 가정하고 젓가락은 5개가 있다고 가정하자. Philosopher i(i번째 철학자) do { //왼쪽, 오른쪽 젓가락을 잡는 연산 P(chopstick[i]); P(chopstick[(i + 1) % 5]); //식사 eat(); //왼쪽, 오른쪽 젓가락 놓는 연산 V(chopstick[i]); V(chopstick[(i + 1) % 5]); think(); } while(1);..