반응형

1. 동작모드

 

1) 입력모드 : 명령 모드에서 <a> or <i> 키를 누르면 시작

2) 명령모드 : 처음 vi편집기 열면 명령 모드에서 시작, 입력모드에서 명령모드로 돌아오려면 esc

3) 최종라인모드 : esc키를 누르고 프롬프트에서 명령을 입력하여 저장, 편집, 검색 기능

-> 명령모드에서  콜론(:) 입력 -> wq 명령어 입력(write & quit)

 

4) vi편집기 열기 : vi [파일명]

 

 

2. 명령모드에서 커서 이동하기 

 

1) h, j, k, l(왼, 아, 위, 오른)

2) left or backspace : 왼

down

up

right or space : 오른

 

3) nG : 줄번호 n번으로 이동

1G : 편집버퍼의 첫 줄로 이동

G : 편집버퍼의 마지막 줄로 이동

 

 

 

 

 

3. 명령모드에서 입력모드로 전환

 

 

 

 

4. 삭제 명령 

 

x : 커서가 있는 문자 1개 삭제

dd : 커서가 있는 곳부터 1행 삭제

ndd : 커서가 있는 곳부터 n행 삭제

p(소문자) : 삭제한 행을 현재 커서가 있는 행의 아래에 붙여넣기

P(대문자) : 현재 커서가 있는 행의 위에 붙여넣기

 

 

5. 복사 명령

 

yy : 커서가 있는 행을 복사

nyy : 커석 있는 행부터 n행을 복사

 

 

 

 

 

6. 편집기 종료

 

:q : 변화가 없을 때 저장없이 종료하고 빠져나옴

:q! : 변화가 있음에도 저장없이 종료하고 빠져나옴

:w : 현재의 파일 이름으로 저장

:wq : 현재의 파일 이름으로 저장하고 빠져나옴

 

 

 

 

7. 최종라인 모드에서 vi 환경설정

:set nu   행 번호 보이게

:set nonu    행 번호 안보이게

반응형
반응형

 

 

파일 및 디렉토리 관리


 

ls : 현재 디렉토리에 저장된 내용을 확인하는 명령이다.

ls -a : all의 뜻, 시스템이 숨겨져 일반 사용자에게 보이지 않는 파일을 포함한 모든 파일 및 디렉토리를 보여준다.

ls -l : long의 뜻, 파일 및 디렉토리 표시, 접근에 대한 허가사항, 링크 수, 사용자, 등록명(그룹명), 파일 크기, 최종 수정시간


mkdir [새로운 디렉토리명] : 새로운 디렉토리를 만들어주는 명령이다.

pwd : 현재 디렉토리의 절대 경로를 알려주는 명령이다.

 

cd [변경하고자 하는 디렉토리명] : 다른 디렉토리로 이동하는 명령

-> cd . : 현재 디렉토리로 이동

-> cd ~ : 계정 홈 디렉토리로 이동

-> cd .. : 상위 디렉토리로 이동

-> cd / : 루트로 이동

-> cd ./a/b : 상대경로를 이용해 하위 경로로 이동

-> cd /home/na/a/b : 절대경로를 이용해 하위 경로로 이동

 

cat > [새로 만들 파일이름] : 새로운 파일에 텍스트 문자를 입력하는 명령이다.

: ctrl + D 로 문자 입력을 종료한다.

cat [파일이름] : 기존 파일에 저장된 내용을 확인하는 명령이다.

cat >> [기존 파일이름] : 기존 파일에 저장된 내용을 변경하는 명령이다.

: ctrl + D 로 문자 입력을 종료한다.

 

cp [옵션][복사할파일] [복사될파일 또는 디렉토리] :  파일 또는 디렉토리를 복사하는 명령이다.

1) cp source copy_source : 같은 디렉토리 안에 다른 파일이름으로 복사하는 경우

2) cp source /home/naeun/work : 다른 디렉토리에 같은 파일이름으로 복사하는 경우

3) cp source copy_source /home/naeun/test : source와 copy_source 파일을 동시에 test 디렉토리에 복사

4) cp -r test /home/naeun/test2 : test 디렉토리 안의 파일을 test2에 복사

[옵션] : -f (기존 파일을 강제로 덮어쓰기), -i (덮어쓰기 전에 여부를 물음)

 

mv [옵션][원본파일명] [변경파일명] : 파일을 이동시키는 명령어이다.

ex) mv source source2

mv [옵션][다수의 원본 파일명][이동 디렉토리] : 현재 디렉토리에서 다른 디렉토리로 파일을 이동시키는 명령

[옵션] : -i : 파일을 이동하기 전에 겹쳐쓰기 여부를 확인한다. 

          -f : 강제로 이동시킨다.

 

 

rm [옵션][삭제할 파일명 또는 디렉토리명] : 파일 또는 디렉토리를 삭제하는 명령어이다.

[옵션] : -i : 파일 삭제하기 전에 삭제 여부를 확인한다.

          -f : 강제로 삭제한다.

          -r : 파일이면 삭제를 하고, 디렉토리일 경우 경로와 파일을 함께 삭제한다.

          -v : 파일 지우는 정보를 세세하게 알려준다.

          -rf : 다수의 파일이 존재하는 디렉토리를 한번에 삭제한다.

 

ln -s [원본파일명][대상파일명] : 바로가기 기능

-> 링크로 생성된 파일의 내용은 존재하지 않으며, 다른 파일이 어디를 가리키고 있는지 알려주는 역할이다.

 

 

 

반응형
반응형

1. 상호배제를 위한 세마포 원리 및 코드

상호 배제의 기능을 수행한다.

 

 

< 원리 >

 

 

< 함수 내부 >

 

 

mutex가 양수이면 들어갈 수 있다.

S.value = mutex 이다.

0 또는 음수이면 사용중이라는 의미이다. (ex) -1이면 대기자가 1명이라는 뜻

 

wait(S)

S.value = -1이면

if문에 들어가서 add this process to S.L

즉, 진동벨을 나누어주고 다른 일을 수행할 수 있도록 한다.

 

signal(S)

수행이 끝나면 S.value 값을 1 올려준다.

그럼에도 아직 대기자가 남아있다면(즉, S.value가 0보다 작거나 같다면)

remove a process P from S.L;

wakeup(P);

즉, 아까 나눠줬던 진동벨을 울려 대기자들을 다시 불러온다.

 

 

 

 

2. 세마포의 장점

: 간단하게 구현된다.

 

 

 

 

3. 동기화 도구로써의 세마포

: 프로세들간에 실행 순서가 정해져 있을 때 사용한다.

: 세마포는 바쁜 대기를 유발하지 않는 동기화 도구이다. 

 

* 중요 *

0으로 초기화된 flag를 사용한다. 즉 mutex = 0; 으로 초기화

 

 

 

ex) A -> B 의 실행 순서가 지켜져야 할 때

세마포 동작 예시

 

flag = 0 이므로 Pj가 먼저 실행된다고 하더라도 wait 상태에 들어갈 것이다.

Pi에서 A가 실행되고 signal(flag);를 해서 flag를 1로 만들 때까지 절대 B를 실행할 수 없는 것이다.

 

 

 

 

 

4. 세마포의 문제점

: 세모포 변수를 여러 개 두고 실행할 경우 교착 상태와 기아 상태를 유발할 수 있다.

 

1) 교착 상태

: 이상의 프로세스들이 대기중인 프로세스들 단지 하나에 의해서만 야기될 있는 사건을 무한정 기다리는 상황

 

2) 기아 상태

무한 정지, 프로세스들이 세마포 큐에서 제거되지 않고 무한정 대기하는 것

 

 

 

ex) flag가 1로 초기화된 경우

P0

wait(S)에서 flag가 0이 되고

wait(Q)에서도 flag가 0이 되어

기다리는 중

 

P1

wait(Q)에서 flag가 하나 더 감소하여 -1이 되고

wait(S)에서도  flag가 하나 더 감소하여 -1이 되어

기다리는 중....

 

-> 서로가 서로를 기다리느라 무한정 기다리는 상황에 빠지게 된다.

 

 

 

 

 

 

5. 고전적 동기화 문제 : 세마포로 해결해보기

 

* 초기화 : full = 0, empty = n, mutex = 1

 

 

-> full은 생산된 데이터의 개수, empty는 남은 버퍼의 개수

 

 

가운데에

wait(mutex);        wait(mutex);

...                          ...

signal(mutex);      signal(mutex);

는 상호배제를 위한 세마포를 구현한 것

 

생산자 위쪽 wait(empty);

소비자 아래쪽 signal(empty); 

는 생산자 동기화를 위한 세마포

 

생산자 아래쪽 signal(full);

소비자 위쪽 wait(full); 

는 소비자 동기화를 위한 세마포

 

 

 

 

 

 

 

 

6. Readers - Writers 문제

: 리더랑 라이터가 여러 명일 때

 

-> 라이터가 없을 때에는 리더가 여러 명이 들어갈 수 있다.

 

 

 

 

 

7. 모니터(Moniters)

: 세마포 연산자들을 한 데에 모아놓은 객체이다.

: 공통된 객체 내에서 활동하도록 보장한다.

: 오류 디버깅을 쉽게 할 수 있게 한다.

 

-> 많은 세마포 사용시, 잘못된 사용으로 오류가 발생하기 쉽기 때문에 사용한다.

 

 

 

 

 

 

 

 

 

 

 

* 정보처리기사 문제 *  

  1. 프로세스들 간에 상호배제해야한다.
  2. 임계 구역은 여러 사용자가 동시에 사용하지 않도록 하는것
  3. 임계 영역 안에서의 작업은 신속히 이루어져야
  4. 어떤 프로세스가 임계영역 내에서 실행중일때 인터럽트가 발생한다고

하더라도 프로세스는 실행을 멈추지 않는다.

    5. 임계영역에서 무결성을 보장한다.(값이 꼬이지 않음)

    6. 하드웨어 자원이 필요한 : Test&Set 명령어

반응형
반응형

1. 임계구역 또는 임계영역

: 한 순간에 한 프로세스만 사용할 수 있는 영역이다.

 

 

 

2. 진입 상호 배제 및 출구 상호 배제

: 프로세스 하나가 임계 영역에 있으면 다른 모든 프로세스는 임계영역으로의 진입을 금지한다.

 

 

 

 

3. 임계영역을 해결하기 위한 세 가지 만족 요건

1) 상호 배제

2) 진행 : 임계영역에 프로세스가 없을 때, 다음에 임계구역으로 진입하려는 프로세스의 진입을 미루면 안된다.

3) 한계 대기 : 한 프로세스가 임계영역 진입 요청을 한 후 수락되기까지 다른 프로세스가 임계영역에 진입할 수 있는 횟수를 제한해야 한다.

( 새치기 금지 )

 

 

 

 

4. 임계구역 SW 해결법 : 2개의 프로세스를 위한 임계구역 SW해결법

 

1) 알고리즘 1

critical section = counter ++ 하는 부분

-> 상호 배제는 충족하나, 진행을 만족하지 못해 실패한 알고리즘이다.

 

 

 

2) 알고리즘 2

 

 

-> 이 알고리즘 또한 상호 배제는 충족하나, 진행을 만족하지 못해 실패한 알고리즘이다.

 

 

 

 

 

3) 알고리즘 3 (피터슨의 해결안)

: 알고리즘 1, 2의 변수들을 결합한 아이디어

-> 모든 세 요건들을 충족한다.

-> 다만, 2개의 프로세스가 있을 경우만 해결할 수 있다.

 

 

 

 

 

 

 

5. 임계구역 SW 해결법 : N개의 프로세스를 위한 임계구역 SW해결법

 

- 램포트(Lamport)가 제안한 베이커리 알고리즘

 

 

-> 너무 복잡하여 배보다 배꼽이 큰 상황이 되었다.

 

결론) HW해결법은 실제로는 거의 사용되고 있지 않다.

 

 

 

 

 

 

 

 

 

6. 임계구역 HW 해결법

: 하드웨어 명령어를 이용한 임계영역 문제 해결

 

- TestAndSet() : 원소적으로 단어의 내용을 테스트하고 수정하는 명령

- Swap() : 원소적으로 두 변수를 바꾸는 명령

 

-> 한 원소가 다 끝날 때까지는 변경하지 않도록 한다.

-> 이 명령어에 대해서는 하드웨어가 다르게 작동하도록 한다.

 

 

 

 

 

알고리즘 해석 )

문이 잠겨있을 때, (lock = true)

lock true이면 반환값도 true이므로 

lock false 때까지 while문을 반복한다.

 

문이 잠겨있지 않을 때, (lock = false)

lock false이면 while문을 돌지하지않고

빠져나간다. , lock false -> true 된다.

후에 critical section 실행하고 

false 다시 변환된다.

 

 

 

 

 

-> 위의 TestAndSet 알고리즘과 동일한 원리이다.

차이점은 lock과 key를 바꾸는 것인데

 

문이 잠겨있지 않을 때 (lock = false)

lock false이면,

lock key 바뀌면서

lock true, key false 

되어 while문을 빠져나간다. -> critical section 실행하고(하는 동안은 lock이 true이므로 다른 프로세스가 진입하지 못한다)

끝난 뒤에 lock = false로 바꿔주어 다른 프로세스가 진입할 수 있도록 해준다.

 

 

 

 

 

 

- 임계구역에서는 인터럽트는 금지하여야 한다.

: 임계구역 내에서는 다른 일을 최소화하고 빠르게 출구 코드로 복귀해야 한다.

 

-임계구역으로 들어갈 때 바쁜 대기(Busy waiting)를 유발한다.

: 프로세스를 블록시키고 CPU를 다른 프로세스에 배정한다.

 

-> SW, HW 해결법은 바쁜 대기 문제를 해결하지 못했다.

 

 

 

 

 

 

 

 

 

 

반응형
반응형

1. 배경 : 병행 프로세스의 문제

 

1) 결정성 : 상대적인 실행 속도와 관계없이 항상 같은 결과를 도출하는지

-> 입력이 같으면 같은 결과가 나와야 한다. 병행 프로세스에서 순서가 꼬이면 다른 결과를 도출할 수도 있다.

2) 상호 배제와 동기화 

- 상호 배제 : 어떤 자원에 대해 한 번에 한 프로세스만이 접근가능

- 동기화 : 프로세스의 진행이 다른 프로세스에 의존

3) 교착 : 프로세스들이 서로 다른 프로세스가 점유한 자원을 요구하며, 아무도 진행되지 못하는 상태

 

 

 

 

 

2. 결정성

: 프로세스들 간의 실행 순서는 독립적 또는 선행 관계이다.

: 선행 관계의 경우, 선행 그래프로 표현 가능하다.

 

-> 프로세스별로 순서가 있으므로 그에 따라 진행하여야 한다.

 

 

 

 

 

 

3. 상호배제

: 특정 공유 자원을 한 순간에 한 개의 프로세스만이 사용할 수 있는 경우에

: 프로세스 하나가 공유 데이터에 접근해 있는 동안, 다른 프로세스가 접근할 수 없도록 하는 것

 

-> 교착 상태와 기아 상태가 발생하게하는 원인이다.

 

 

 

 

 

 

4. 동기화

: 빨리 끝나는 프로세스가 늦게 끝나는 프로세스를 어떻게 기다려줄지가 문제이다.

: 비동기 프로세스의 대기 시점을 결정한다.

 

 

 

 

 

5. 상호배제 및 동기화의 예시

- 제한 버퍼의 생산자/소비자 문제

 

 

 

6. 경쟁 상태 : 여러 프로세스가 공유 데이터에 동시에 접근할 때, 접근 순서에 따라 결과가 달라지는 상황

 

< 경쟁 상태를 위한 병행 프로세스들의 동기화 방법 >

1) 임계 영역 : 공유 변수를 어느 한 순간에 한 프로세스만 조작할 수 있도록 한다.

2) 상호 배제 : counter를 조작하는 부분을 임계영역으로 설정하여 상호 배제한다.

 

 

반응형
반응형

1. 기본 개념

: SQL문 안에 SQL문을 중첩하여 사용하는 질의이다.

: 다음과 같은 연산자와 함께 사용한다.

- in, not in

- =some, <some, >some, <=some, >=some, <>some

- =all, <all, <=all, >all, >=all, <>all

- exists, not exists

 

-> From , where 절에 위치할 수 있다.

 

 

 

 

2. IN / NOT IN

 

 

select title

from course

where course_id not in ('C301', 'C302', 'C401');

 

라고도 쓸 수 있다.

 

 

 

 

3. SOME / ALL

 

= SOME : 지정된 필드의 값이 부-질의 검색 결과에 존재하는 임의의 값과 같은지를 나타낸다. (IN과 같은 의미)

<= SOME : 지정된 필드의 값이 부-질의 검색 결과에 존재하는 임의의 값보다 작거나 같은지를 나타낸다.

= ALL : 지정된 필드의 값이 부-질의 검색 결과에 존재하는 모든 값과 같은지를 나타낸다. 

<= ALL : 지정된 필드의 값이 부-질의 검색 결과에 존재하는 모든 값보다 작거나 같은지를 나타낸다.

 

 

 

 

 

 

 

 

 

 

4. EXISTS / NOT EXISTS

exists : 최소한 한 개의 레코드가 존재하면 참이 되고 그렇지 않으면 거짓이 된다.

not exists : 부-질의의 결과에 레코드가 하나도 없으면 참이 되고, 하나라도 있으면 거짓이 된다.

 

 

 

반응형

+ Recent posts