반응형

학부 내용 정리/[ 2-1 ] 운영체제 19

[ OS ] FSCK and Journaling

컴퓨터를 사용하다보면 시스템이 출돌하거나 전원이 차단될수도 있다. 디 때 다시 정상적으로 유지하기 위해서 어떻게 할지에 대한 내용이다. 파일을 작성할 때에는 3가지에 정보가 업데이트된다. 1. Data bitmap 2. inode 3. data block 이 정보를 업데이트하다가 오류가 났고 세개 중 하나만 업데이트 되었을 때 무슨일이 일어나는지 봐보자. 1) 데이터 블록에만 적혔을 때 이 때는 파일은 존재하지만 그 파일에 대한 정보는 존재하지 않는다. inode와 data bitmap의 정보 불일치는 일어나지 않아 그나마 괜찮다. 2) inode 만 업데이트 됐을 때 데이터가 유효하다고 적혀있는데 입력이 되어있지 않아 디스크에서 쓰레기 값을 읽게 된다. inode와 data bitmap의 정보 불일치가..

[ OS ] File System Implementation

파일 시스템은 100퍼센트 소프트웨어 프로그램이다. 이는 단지 더 잘 실행될 수 있기 위해 하드웨어의 기능을 추가하지 않았다. 1. Data structures 아래 그림은 파일 시스템의 데이터 구조을 나타낸 그림이다. 위 그림을 보며 하나하나 설명해보겠다. 1.1 Block 디스크의 단위이다. 전체적으로 데이터는 연속적은 Block으로 이루어져 있다. 위에 보면 D 가 적혀 있는 박스 하나가 한 Block이다. 1.2 Data region 이 블록들을 위해 디스크에는 고정된 부분이 있다. 이는 그림에서 D로 표현되어있으며 데이터가 저장되어있다. 1.3 Metadata Metadata란 데이터들을 위한 데이터를 의미한다. 인덱스 3번부터 7번 까지를 보면 I 라고 되어있다. 이는 inode table이라..

[ OS ] Files and Directories

파일 - 바이트의 선형 배열 - 각 파일의 가장 기본적인 이름은 inode - OS는 확장자를 보고 파일의 구조를 알지 못한다. Directory - 사용자가 읽을 수 있는 이름과 하위 수준의 이름 쌍을 포함한다. (foo , 10) - 디렉토리의 inode도 있다. 1. Creating files /* open */ int fd = open("foo", O_CREAT|O_WRONLY|O_TRUNC, S_IRUSR|S_IWUSR); O_CREAT : 똑같은 이름의 파일이 없다면 생성, 있다면 open O_WRONLY : 오직 쓰기 위해 open O_TRUNC : 파일이 이미 있는 경우 덮어쓴다 S_IRUSR|S_IWUSR : 사용자 권한 지정, 이 경우 소유자가 파일을 읽고 쓸 수 있도록한다. 2 Acc..

[ OS ] I/O Devices and HDD

1. I/O Devices interface : 시스템 소프트웨어가 작동을 제어할 수 있도록한다. 모든 장치에는 지정된 인터페이스와 프로토콜이 있다. internal : 장치가 시스템에 제공하는 추상적인 명령을 구현하기 위해 구현되어있다. While (STATUS == BUSY) ; // 바쁘니까 이따 와라 Write data to DATA register Write command to COMMAND register (Doing so starts the device and executes the command) While (STATUS == BUSY) ; // wait until device is done with your request 비효율성 및 불편함 1. Polling : Busy 면 계속 기다려..

[ OS ] Common Concurrency Problems

1. Non-deadlock bugs 1.1 Atomicity-violation bugs 코드 영역은 원자성이지만 실행 중에는 원자성이 적용되지 않을 수도 있다. = race conditon -> mutex 로 해결 가능 1.2 Order-violation bugs 원하는대로 스레드가 실행되지 않아 오류가 생길 수 있다. -> mutex랑 cond를 이용하여 해결 가능 2. Deadlock bugs 2.1 Conditions for Deadlock - Mutual exclusion : 스레드가 lock 되어있어야 함 - Hold-and-wait : lock을 갖고 다른 lock을 갖는다 - No preemption : lock을 강제로 뺏지 못한다 - Circular wait : 각 스레드가 다른 스레드..

[ OS ] Semaphores

Semaphores를 이용하면 lock과 conditon variable을 동시에 사용할 수 있다. 이런 Semaphores는 여러가지 용도로 사용할 수 있다. int sem_init(sem_t *s, int pshared, unsigned int value) // 가운데 인자에는 공유한는 프로세스개수, 마지막인자에는 초기값을 넣어 초기화하는 함수이다 int sem_wait(sem_t *s) // s 를 1 감소시키고 s가 음수가 되면 재우는 함수 int sem_post(sem_t *s) // s 를 1 증가시키고 큐에 자는애가 있으면 깨우는 함수 /*사용예시*/ sem_t m; sem_init(&m, 0, 1); sem_wait(&m); // critical section here sem_post(&m..

[ OS ] Condition Variables

조건이 성립하기 전까지 기다리는 것은 스레스에서 굉장히 유용하다. 하지만 이는 CPU 사이클이 낭비된다. 이를 해결할 수 있는 것은 Condition Variables이다. Condition Variables는 큐이다. 스레드가 조건에 성립하지 않아 실행되지 않을 때 큐에 배치된다. 다른 스레드가 상태를 바꾸고 큐에 대기중인 스레드를 깨워 계속 진행할 수 있다. pthread_cond_wait(); // 스레드가 잠들 때 사용 pthread_cond_signal(); // 자는 애를 깨움 함수는 위와같으며 인자로는 mutex가 들어간다. int done = 0; pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t c = PTHREAD_COND_I..

[ OS ] Locks_slides

1. Evaluating locks critical sectiond에 여러 스레드기 들어가지 않도록 조심해야한다. lock이 풀리면 모든 스레드가 그것을 얻을 공평한 기회를 얻어야한다. 즉 굶는 스레스다 있으면 안된다. 또, lock으로 인해 over head가 일어나서도 안된다. 이 방법은 lock 하면 interrupt를 막고 unlock 하면 interrupt를 받아드리는 방법이다. 이 방법은 단점이 많다. - interrupt를 막고 받고 하려면 권한이 있어야한다 - 멀티 프로세스 환경에서는 통하지 않는다. (interrupt) 2. Spin locks typedef struct __lock_t { int flag; } lock_t; //구조체 선언 void init(lock_t *mutex) {..

[ OS ] Concurrency and Thread

1. Multi-threaded program 단일 스레스는 프로세스와 비슷하게 각 스레스 자체 PC와 레지스터, 스레드만의 스택을 가지고 있다. 하지만 멀티 스레드는 프로세스와 다르다. - 동일한 주소공간을 공유하여 같은 데이터에 접근할 수 있음 - 동일한 주소공간을 갖고 있어 페이지 테이블을 전환할 필요 없음 (context switch 필요 없음) * context switch는 프로세스가 바뀔 때만 일어남 스레드는 TCB(Thread Control Block)으로 관리된다. 스레드는 Heap 영역과 Program Code(read only) 부분은 공유하고 stack 영역은 스레드별로 가지고 있다. 1.1 스레드의 장점 1) 병렬성을 증가시킬 수 있다 - CPU의 개수가 계속 늘어나고 있는데 이때..

반응형