목록분류 전체보기 (282)
내 잡다한 노트
모든 통신에 관련된 연산은 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]와 ..
시간제한은 1초인데 입력받는 호수의 크기는 1500 * 1500로 크기가 크다. 그래서 단순히 bfs로 탐색하면 시간제한에 걸린다. 그래서 물과 얼음이 만나 얼음이 녹을 때 얼음의 자리를 임시물 큐에 넣어놓아 다음날 다시 탐색을 할 때 전체 물을 탐색할 필요없이 임시물 큐에 있던 자리만 탐색을 해서 중복을 없앤다. 이 같은 방식으로 백조도 다른 백조를 만날 수 있는지 확인한다.
인터럽트는 여러가지 이유로 발생한다. 프로세스가 입출력때문에 대기상태로 가서 완료가 되면 인터럽트 신호를 보낼 수도 있고 컴퓨터에 오류가 발생해 오류 처리하라고 인터럽트 신호를 보낼 수도 있다. 동기적 인터럽트 프로세스가 실행 중인 명령어로 인해 발생한다. 사용자 인터럽트라고도 한다. 사용자가 실행하다가 발생하는 인터럽트이다. 비동기적 인터럽트 하드웨어의 오류로 발생하는 인터럽트를 뜻한다. 인터럽트는 각각의 번호가 있고 번호마다 인터럽트가 발생 시 핸들링하는 함수들이 존재한다. 인터럽트를 처리할 땐 인터럽트 벡터라는 자료구조가 존재해 벡터에서 한꺼번에 인터럽트를 묶어서 처리한다. 이 벡터에는 여러개의 인터럽트가 번호와 핸들링되는 함수를 가진채로 존재하고 해당 번호의 인터럽트가 발생하면 1을 증가시키는 방..
준비 상태의 다중 큐 우선순위에 따라 여러가지 큐가 존재하고 그 큐에 프로세스 제어 블록을 넣어 놓는다. 고정 우선순위 방식 프로세스를 처음 우선순위를 정할 때 그 우선순위가 계속 고정적으로 변하지 않는 방식을 뜻한다. 작업 효율이 떨어진다. 변동 우선순위 방식 프로세스를 실행하는 도중에 다른 프로세스와의 관계나 여러가지 이유로 우선순위를 바꾸는 방식을 뜻한다. 낮은 우선순위의 프로세스가 중요한 자원을 할당하고 있다면 그 프로세스가 실행이 끝나야 다른 프로세스들이 그 자원을 쓸 수 있게 된다. 하지만 우선순위가 낮아 빨리 처리할 수가 없어지니 우선순위를 높여 빠르게 실행시켜버리는 것을 반전 우선순위라고 한다. 대기 상태의 다중 큐 대기 상태는 입출력때문에 가다보니 다양한 입출력에 따라 여러가지 큐를 둬서..