일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 데이터 과학
- 안드로이드스튜디오
- 리액트네이티브
- 백준2098
- datapath
- 앱심사
- 외판원순회
- 알고리즘
- 코틀린
- 탐색
- 컴퓨터구조
- 그리디
- 컴퓨터알고리즘
- 분할과정복
- 배낭문제
- 정렬
- 부동소수점
- 개발
- 대외활동
- H-모빌리티 클래스
- ios
- 카카오테크캠퍼스
- 함수형 프로그래밍
- 판다스
- 컴퓨터공학과
- cpp02
- 프로그래밍 언어론
- 데이터과학
- 유전학알고리즘
- 백준
- Today
- Total
목록CSE/운영체제 (6)
minkylee

메모리 종류FLASH : 고밀도, 저전력, 고속, 업데이트 가능, 데이터 보존 가능DRAM : 고속이지만 전원이 꺼지면 데이터 사라짐 (휘발성)ROM : 고정된 내용만 읽기 가능, 값 싸고 신뢰성 높음EPROM/EEPROM : 비휘발성, EPROM은 자외선으로 지우고, EEPROM은 전기적으로 바이트 단위 삭제 가능 플래시 메모리 flash memory cell은 Floating gate transistor를 사용하여 Floating Gate에 전자를 저장한다. 전자는 절연막으로 둘러싸여서 오래 유지된다.데이터는 이 전자의 유무로 표현된다. (없으면 1, 있으면 0) 플래시 메모리는 트랜지스터의 임계 전압을 바꿈으로써 1과 0을 구분한다. 이걸 통해 비휘발성 메모리가 된다. 특징Erase-before-w..

지속성은 데이터 저장에서 중요한 개념이다.I/O 장치 CPU와 메모리는 Memory Bus로 직접 연결됨일부 장치는 일반적인 I/O Bus (PCI, USB)로 연결됨I/O 장치는 두 부분으로 구성되는데 Hardware interface : 시스템 소프트웨어가 I/O 장치를 조작하는 제어판 역할Internals : 장치 내부 구조 (펌웨어, 메모리, 전용 칩 등) 운영체제는 장치에 있는 3개의 레지스터를 읽고 쓰는 것만으로 장치를 제어할 수 있다. 일반적인 I/O 장치 상태확인의 두 가지 방법으로는 폴링과 인터럽트가 있으며 각각의 방식은 특정 장치의 준비 상태를 확인하는 데 사용된다. 폴링 Polling운영체제가 장치가 준비될 때까지 상태 레지스터를 반복적으로 읽으면서 장치가 준비될 때까지 기다린다.간단..

세마포어정수 값을 가진 객체로 sem_wait() sem_post()로 조작할 수 있다.#include sem_t s; // 선언sem_init(&s, 0, 1); // 1로 초기화 sem_init의 두 번째 인수 0은 같은 프로세스 내의 스레드끼리 공유한다는 의미이다.초기값 1은 처음에 1개의 자원이 있다는 것을 뜻한다. sem_wait(sem_t *s) : 세마포어 s값을 1만큼 감소시키며 s 값이 음수라면 대기한다.음수일 경우 세마포어 값은 대기 중인 스레드 개수와 같다.sem_post(sem_t *s) : 세마포어 s값을 1만큼 증가시키며 대기 중인 스레드가 하나 이상 있으면 하나를 깨운다. 초기 값을 1로 줄 경우 이진 세마포어 (lock) 으로 동작한다. 즉 한 번에 한 개의 스레드만 접근이 ..
여러 작업을 동시에 처리할 때 어떤 작업은 다른 작업이 특정한 상태가 될 때까지 기다려야 할 때가 있다.예를 들어, 부모 스레드가 자식 스레드를 만들어서 어떤 일을 시키고 그 일을 다 마칠 때까지 기다렸다가 다음 일을 해야 하는 경우가 있다. (join) 이 때 부모 스레드는 자식 스레드가 완료되었다는 조건이 참이 될 때까지 기다려야 한다. 만약 이를 스핀 기반으로 구현한다면 CPU 시간을 낭비하게 되어 매우 비효율적이다. 조건 변수 조건 변수는 스레드가 원하는 실행 상태가 아닐때, 예를 들어 필요한 데이터가 아직 준비되지 않았거나 선행 작업이 필요한 경우에 자신을 대기열에 넣을 수 있게 한다. 다른 스레드가 상태를 변경하면 대기 중인 스레드 중 하나를 깨워 계속 진행할 수 있도록 한다. 스레드 간의 ..

공유 자원지역 변수는 각 스레드가 고유한 스택을 가지므로 스레드 간에 공유되지 않는다.글로벌 변수는 정적 데이터 세그먼트에 저장되어 모든 스레드에서 접근 가능하며,동적 객체는 힙(heap)에 저장되어 포인터를 통해 여러 스레드가 공유할 수 있다.하지만 공유 자원에 여러 스레드가 동시에 접근하게 되면,race condition(경쟁 조건)이 발생하여 프로그램의 출력이 비결정적일 수 있다.→ 즉, 같은 입력을 넣어도 실행할 때마다 결과가 달라질 수 있다. 이러한 문제를 해결하기 위해 동기화가 필요하다. 동기화는 한 번에 하나의 스레드만 자원을 사용할 수 있도록 한다. 그렇기 때문에 동시성을 제한한다. 또한 스레드의 실행 순서는 개발자가 직접 제어할 수 없기 때문에 더욱 주의가 필요하다. 임계 구역에 대한 ..

원래 프로그램은 한 번에 한 가지 일만 처리할 수 있다. 여러 일을 동시에 하려면 새로운 프로그램을 여러 개 만들어야 했는데 아주 번거롭고 비용도 많이 들었다. 그래서 프로그램 안에서 여러 일을 동시에 더 쉽고 저렴하게 처리할 방법이 필요해졌다. Thread 스레드는 단일 실행 프로세스를 위한 새로운 추상화이다. 즉 스레드(Thread)는 하나의 프로그램(프로세스)이 동시에 여러 작업을 실행할 수 있도록 만든 개념(추상화)이다. 각 스레드는 고유한 ID, 레지스터 집합, 스택을 가진다. 멀티스레드 프로그램은 하나의 프로그램 안에서 여러 개의 작업 흐름을 가질 수 있다. 멀티스레드멀티스레드 프로그램은 프로그램 안에서 여러 부분이 동시에 진행될 수 있다. 그래서 다음에 실행할 코드의 위치를 가리키는 Prog..