프로세스의 상태 프로세스의 상태는 3가지로 나뉜다 실행(running) 준비(ready) 봉쇄(blocked, wait, sleep) 일반적으로 CPU에서 실행 상태에 있는 프로세스는 매시점 하나밖에없다. 준비 상태는 CPU만 할당받으면 당장 명령을 수행할 수 있지만, CPU가 하나밖에 없어 현재 CPU를 할당받지 못한 프로세스 상태를 말한다. 봉쇄 상태는 CPU를 할당받더라도 명령을 수행할 수 없는 프로세스 상태를 말한다. 예를 들어, 입출력 작업이 진행중인 프로세스같은 경우가 해당된다. 준비상태에 있는 프로세스가 실행상태로 변경되는 경우는 실행상태에 있던 프로세스가 입출력 요청 등으로 봉쇄상태가 되거나 또는 실행 상태에 있던 프로세스의 CPU할당 시간이 만료되어 타이머 인터럽트가 발생한 경우등이 있다..
시스템 콜 프로그램에서 실행되는 시스템 콜은 함수 호출이긴 하지만 프로그램 자기 자신의 주소 공간에 존재하는 것이 아닌 커널에 존재하는 함수를 호출하는 것이다. 일반적인 함수 호출이 자신의 스택에 복귀 주소를 저장한 후 호출된 함수 위치로 점프하는 것임에 비해 시스템 콜은 주소 공간 자체가 다른곳으로 이동해야 하므로 일반 함수 호출과는 다른 방법을 사용한다. 그 방법은 프로그램 자신이 인터럽트 라인에 인터럽트를 세팅하라는 명령을 통해 이루어진다. 이는 프로그램이 스스로 인터럽트 라인을 세팅한다는 점만 다를 뿐 일반적인 인터럽트의 발생과 동일한 방법이라 할 수 있다. 어떤 프로그램이 CPU를 할당받고 명령을 수행도중 중간에 CPU를 선점당하는 경우 두가지로 나뉘게 된다. 타이머에 의해 인터럽트가 발생한 경..
하드웨어 인터럽트 하드웨어 인터럽트의 경우 하드웨어 컨트롤러가 CPU의 서비스를 요청하기 위해 발생시키는 인터럽트를 의미한다. CPU는 특별한 일이 없으면 현재 수행중인 프로세스의 다음 명령을 순차적으로 수행한다. 프로세스가 CPU를 계속 점유하고 있으면 이를 다른 프로세스가 선점할 수 없으므로 이에 대한 제어 메커니즘이 필요하다. 일반적으로 인터럽트는 CPU가 아닌 다른 하드웨어 장치가 CPU에게 어떤 사실을 알려주거나 CPU의 서비스를 요청할 경우 CPU내의 인터럽트 라인을 세팅해 발생시킨다. CPU는 매번 프로그램 카운터가 가르키고 있는 지점의 명령을 하나씩 수행하고나서 다음 명령을 수행하기 직전에 인터럽트 라인이 세팅되었는지를 체크한다. 인터럽트 라인 체크를 통해 인터럽트가 발생했으면 CPU는 현..
프로그램이 사용하는 함수는 크게 세가지로 구분된다 사용자 정의 함수 : 프로그래머가 직접 작성한 함수 라이브러리 함수 : 누군가 작성해놓은 함수 커널 함수 : 운영체제 커널의 코드에 정의된 함수 사용자 정의 함수와 라이브러리 함수의 경우 프로그램이 실행될 때에 해당 프로세스의 주소공간에 포함된다. 커널함수의 종류에는 사용자 프로그램이 운영체제의 서비스를 요청하기 위해 호출하는 시스템콜 함수와 각종 하드웨어 및 소프트웨어가 CPU의 서비스를 요청하기 위해 발생시키는 인터럽트 처리 함수가 있다.
프로그램의 실행 프로그램의 실행은 컴퓨터 시스템 차원에서 두가지의 의미를 가진다. 디스크에 존재하던 실행 파일이 메모리에 적재된다. 프로그램이 CPU를 할당 받고 기계 명령을 수행하고 있는 상태이다. 실행 파일이 메모리에 적재될 때, 실행 파일 일부분만 메모리에 올라가고 나머지는 디스크의 특정 영역에 내려가 있는다. 이러한 특정 영역을 스왑 영역 이라고 한다. 각 프로그램마다 독자적으로 존재하는 코드, 데이터, 스택 주소공간을 가상 메모리(virtual memory) 혹은 논리적 메모리(logical memory)라고 부른다. 실제 물리적 메모리의 주소와 독립적으로 각 프로그램마다 독자적인 주소 공간을 가지기 때문이다. 운영체제도 하나의 프로그램으로서 운영체제 커널 또한 코드, 데이터, 스택의 주소 공간..
컴퓨터 시스템의 작동 개요 CPU는 현재 수행해야 할 메모리 주소의 명령을 있는 그대로 처리한다. CPU가 수행해야 할 메모리 주소를 담고있는 레지스터를 프로그램 카운터(PC) 라고 부른다. 즉 CPU는 PC가 가르키는 메모리 여역의 명령을 처리한다. 시스템 동작이 CPU에 의해서만 이루어지는것은 아니다. 입출력 장치와 이들 장치를 전담하는 컨트롤러 및 버퍼로 구성된다. (컨트롤러는 작은 CPU, 버퍼는 그에 상응하는 메모리) PC가 메모리 주소 중 운영체제가 존재하는 부분을 가르키고 있으면 현재 운영체제의 코드를 수행중이며, CPU가 커널모드에서 수행중이라고 한다. PC가 메모리 주소 중 사용자 프로그램이 존재하는 부분을 가르키고 있으면 사용자모드라고 한다. CPU가 수행하는 명령에는 일반명령과 특별 ..
프로그램 구조와 인터럽트 프로그램이 CPU에서 명령을 수행하려면 수행하려는 주소영역이 메모리에 올라가 있어야 한다. 이때 프로그램의 주소 영역은 코드, 데이터, 스택 영역으로 구분된다. 코드 영역 : 작성된 프로그램의 함수들의 코드가 기계어 명령으로 변환되어 저장되는 부분 데이터 영역 : 전역 변수 등 프로그램이 사용하는 데이터를 저장하는 부분 스택 영역 : 함수가 호출될 때 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장하는데 사용되는 공간 인터럽트 동작 원리도 함수의 호출과 비슷하다. 프로그램의 경우 인터럽트가 발생하면 현재 수행중인 명령을 프로그램의 스택 영역에 저장한다. 이후 운영체제 내부 코드인 인터럽트 처리 루틴으로 넘어가서 인터럽트를 처리하고 다시 돌아와 이전 작업부터 수행..
Bash shellBash 는 Bourne Again Shell의 축약어이다. 이것은 원래의 본쉘과 호환이 가능하며 명령 라인 편집과 같은 몇 가지 점에서 기능이 향상되었다. 또한 Bash쉘은 리눅스 쉘이며 리눅스에서 가장 널리 사용되는 쉘이다.설정 파일들bash는 다섯개의 공통된 설정 파일들을 가지고 있다. 모든 리눅스 배포본에 존재하지는 않지만 이 파일들을 만드는 것은 어렵지 않다./etc/profile/etc/bashrc~/.bash_profile~/.bashrc~/.bash_logout이 파일들은 전역적인 것과 지역적인 것의 두 개 그룹으로 나누어질 수 있다. bash를 사용하는 모든 사용자에게 영향을 주는 설정 내용을 담고 있는 파일들은 전역적이다. 일반적으로 전역적인 파일은 /etc 디렉토리에..