목록분류 전체보기 (301)
내 잡다한 노트
교착 상태를 해결하는 방법은 예방, 회피, 검출, 회복이 있다. 예방과 회피는 방식이 까다롭고 비효율적이라 사용하지 않는다. 보통 검출을 통해 교착 상태를 확인하고 회복으로 문제를 해결한다. 교착상태검출 운영체제가 프로세스의 작업을 관찰하며 교착상태 여부를 주시하는 방식. 보통 타임아웃방식과 자원그래프방식 2가지를 사용한다. 타임아웃을 이용한 방식 일정시간 동안 작업이 진행되지 않는 프로세스를 교착상태가 발생한 것으로 간주하여 처리하는 방식이다. 이건 교착상태가 잘 일어나지 않을 것이라는 가정을 하고 해결하는 방식이다보니 문제가 생길 수 있다. 1. 교착 상태가 아님에도 작업이 진행되지 못하는 프로세스가 강제종료될 수 있다. 2. 모든 시스템에 적용할 수 없다. 하나의 운영체제 내에서 동작하는 프로세스들..
교착 상태는 여러가지 조건에 의해 발생하고 이 조건들이 다 충족되야 발생한다. 1. 상호 배제 한 프로세스가 사용하는 자원은 다른 프로세스와 공유할 수 없는 배타적인 자원이어야 한다. 배타적인 자원은 임계구역으로 보호되기 때문에 다른 프로세스가 동시에 사용할 수 없다. 따라서 배타적인 자원을 사용하면 교착 상태가 발생한다. 2. 비선점 프로세스가 사용중인 자원은 중간에 다른 프로세스가 뺏을 수 없는 비선점 자원이여야 한다. 뺏을 수 없다면 공유도 안되기 때문에 교착 상태가 발생한다. 3. 점유와 대기 프로세스가 어떤 자원을 할당받은 상태에서 다른 자원을 기다리는 상태여야 한다. 다른 프로세스가 필요로 하는 자원을 점유하고 있으면서 다른 자원을 기다리는 대기 상태가 되어야 한다. 4. 원형 대기 점유와 대..
교착 상태 deadlock이라고 불리며 프로세스가 실행중이지만 작업은 이루어지지 않을 때를 교착상태라고 한다. 이걸 예시로 할 때 원탁에서 식사하는 철학자들로 쉽게 설명을 하곤한다. 교착 상태는 아사현상과 비슷해 보이지만 다르다. 아사현상은 운영체제의 잘못으로 발생하지만 교착 상태는 여러 프로세스가 실행되다보니 자연적으로 일어나는 문제이다. 따라서 운영체제는 감시를 하다가 강압적으로 문제를 해결한다. 교착 상태의 발생 시스템 자원, 공유 변수, 응용 프로그램을 사용할 때 발생할 수 있다. 자원할당 그래프 어떤 프로세스가 어떤 자원을 할당했는지를 그래프로 쉽게 나타낸 것이다. 자원이 2개 이상의 프로세스를 동시에 허용하는 경우가 있는데 이걸 다중 자원이라고 부른다.
모든 통신에 관련된 연산은 open, read, write, close 구조라는 것을 잊지 말아야 한다. 파일 파일 기술자는 파일 접근 권한 외에 현재 파일의 어느 위치를 읽고 있는지에 대한 정보도 보관한다. 파일을 이용한 통신 부모 프로세스가 자식 프로세스를 fork로 만들었을 때, 파일 기술자가 자식 프로세스에도 상속된다. 파일 기술자의 위치 정보는 부모와 자식이 공유하게 된다. 부모가 읽기 연산을 해도 기술자가 전진하고 자식이 해도 전진한다. 이때 부모가 기술자를 0번 위치로 이동시키는 명령어가 lseek 이다. 파일은 동기화를 운영체제에서 지원해주지 않기 때문에 wait을 이용해 기다렸다가 작업ㅂ을 시작한다. 파이프 이름없는 파이프와 이름 있는 파이프로 크게 나뉜다. 여기선 이름 없는 파이프를 살..
임계구역 문제를 해결하는 가장 좋은 방법은 잠금이다. 프로세스가 임계구역을 사용할 땐 잠그고 다 사용하면 동기화해서 다른 프로세스가 쓸 수 있도록 한다면 문제를 해결할 수 있을 것이다. 임계구역 문제는 프로세스의 타임아웃 과정에서 생길 수 있는 것 같다. 한정대기를 만족하지 못하는 상황을 교착상태 deadlock이라고 한다. 교착상태는 프로세스가 살아있지만 작업이 진행되지 못하는 상태를 의미한다. 소프트웨어 뿐만 아니라 하드웨어적으로도 임계구역을 해결 할 수도 있다. 세마포어 모니터 공유 자원을 내부적으로 숨기고 공유 자원에 접근하기 위한 인터페이스만 제공함으로써 자원을 보호하고 프로세스 간에 동기화를 시킨다. 시스템 호출과 같은 개념이다. 시스템 호출이란 시스템 자원을 사용자로부터 숨기고 사용자의 요구..
공유 자원 여러 프로세스가 공동으로 사용하는 변수, 메모리, 파일같은 자원을 뜻한다. 임계구역 공유 자원들은 어떤 프로세스가 먼저 사용하느냐에 따라 값들이 달라질 수 있다. 이런 순서에 따라 달라지는 프로그램의 영역을 임계구역이라고 한다. 이런 임계구역은 전역변수 뿐만 아니라 하드웨어의 자원도 될 수 있다. 예를 들어 프린터. 임계구역 문제 해결 조건 세 가지 조건을 만족해야 문제를 해결할 수 있다. 1. 상호 배제 한 프로세스가 임계구역에 들어가면 다른 프로세스는 들어갈 수 없다. 2. 한정 대기 어떤 프로세스도 무한 대기하지 말아야 한다. 3. 진행의 융통성 한 프로세스가 다른 프로세스의 진행을 방해해서는 안된다. 임계구역을 아무도 쓰지 않는다면 기다릴 필요없이 쓴다.
프로세스간에 자원들의 정보를 알려주기 위해 서로 통신을 한다. 통신의 종류로는 내부 데이터 통신, 프로세스 간 데이터 통신, 네트워크를 이용한 통신이 존재한다. 내부데이터는 한 프로세스에서 2개 이상의 스레드가 존재할 때 스레드끼리 통신을 하는 경우를 말한다. 내부 데이터는 보통 전역변수와 파일 방식을 사용하고 프로세스 간에는 파일과 파이프, 네트워크를 이용할 때는 소켓을 활용한다. 즉, 통신의 방식에는 전역변수, 파일, 파이프, 소켓등이 있다. 통신 방향에 따른 분류 단방향통신 : 한쪽 방향으로만 통신할 수 있는 통신. 예로 전역변수와 파일이 있다. 양방향통신 : 양쪽 방향으로 통신가능. 소켓이 그렇다. 반양방향통신 : 양쪽 방향으로 전송할 수 있지만 동시 전송은 불가능하고 특정 시점에 한쪽 방향으로만..
정규 표현식에는 메타 문자가 있다. 그것은 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자를 의미한다. 문자 클래스 : [ ] 문자 클래스로 만들어진 정규식은 "[ ] 사이의 문자들과 매치" 라는 의미를 갖게 된다. [abc]라면 이 표현식의 의미는 "a, b, c 중 한 개의 문자와 매치" 를 뜻한다. 두 문자 사이에 - 을 사용하면 두 문자 사이의 범위를 의미한다. 문자 클래스 안에 ^ 메타 문자를 사용할 경우 반대라는 의미를 갖는다. 예를 들어 [^0-9]라는 정규 표현식은 숫자가 아닌 문자만 매치된다. 자주 사용하는 정규 표현식은 별도의 표기법으로 표현할 수 있다. 다음을 기억해 두자. \d - 숫자와 매치, [0-9]와 동일한 표현식이다. \D - 숫자가 아닌 것과 매치, [^0-9]와 ..