2023. 4. 10. 22:40, 학교공부
인터럽트
- 입출력 장치들이 비동기적 사건을 CPU에게 알리는 행위
- 비동기 → 동기와 다르게 요청을 보냈을 때 응답이 도착하지 않아도 요청을 보낼 수 있다.
- 마우스 조작 , 키보드 입력
- 네트워크로부터 데이터 도착 등등
- 인터럽트 서비스 루틴
- ISR → 인터럽트 핸들러
- 위치 : 디바이스 드라이버나 커널 코드, 임베디드 컴퓨터 ROM
인터럽트는 다중 프로그래밍 실현의 키이다.
- 다중 프로그래밍 리뷰
- 여러 프로세스를 동시에 실행한다. (멀티 프로그래밍)
- 프로그래밍과 프로세서는 프로그램 하나가 프로세서 하나를 같이 운영 할 수 있다.
- 한 프로세스가 입출력을 시행하면 다른 프로세스로 교체 실행된다.
- 입출력이 완료될 때, 장치로부터 입출력 완료 통보를 받는 방법이 필요하고 그것이 바로 인터럽트이다.
- 인터럽트가 없다면 ? → CPU는 폴링을 실행해야 하므로 비효율정이다.
- 폴링 ⇒ 하나의 장치(또는 프로그램)가 충돌 회피 또는 동기화 처리 등을 목적으로 다른 장치(또는 프로그램)의 상태를 주기적으로 검사하여 일정한 조건을 만족할 때 송수신 등의 자료처리를 하는 방식
- 다중 프로그래밍 운영체제의 구현은 사실상 거의 불가능하다.
- 인터럽트가 없다면 ? → CPU는 폴링을 실행해야 하므로 비효율정이다.
- 인터럽트의 효과
- 컴퓨터 시스템이 효율적으로 작동한다.
- CPU 활용률이 높아진다. (시스템 처리율 향상)
- 입출력 장치와 CPU가 동시에 각자의 작업을 실행한다.
- 입출력 장치 → 지시받은 입출력 진행 / CPU → 다른 프로그램 실행
- 컴퓨터 시스템이 효율적으로 작동한다.
더보기
인터럽트는 프로세스가 입출력 등의 외부 사건에 의해 중단 후 처리 후에 다시 프로세스를 계속 실행시키는 것을 의미한다.
인터럽트 발생 시 ISR (Interrupt Service Routine) 혹은 Interrupt Handler 가 실행된다.
인터럽트가 존재하지 않는다면 다중 프로그래밍 운영체제의 구현은 사실상 불가능하다.
프로세스
- 프로그램
- 하드디스크 등의 저장 매체에 저장된다. (실행 파일의 형태)
- 프로세스
- 프로그램이 메모리에 적재되어 실행 되는 상태
- 필요한 모든 자원을 할당받는다.
- 코드공간, 데이터공간, 스택공간, 힙공간
- 프로세스 특징
- 운영체제는 프로그램을 메모리에 적재하고 프로세스로 다룬다.
- 메모리를 할당 후 코드와 데이터 등을 적재한다.
- 프로세스들은 서로 독립적인 메모리 공간을 가진다.
- 운영체제는 프로세스마다 고유한 번호를 할당한다. ⇒ PID
- 운영체제는 각 프로세스의 메모리 위치와 크기 정보를 관리한다.
- 프로세스의 모든 정보는 커널에 의해 관리된다.
- 프로세스는 실행 - 대기 - 잠자기 - 대기 - 실행 - 종료 등의 생명 주기를 가진다. (모든 관리는 커널에 의해 수행된다.)
- 프로그램이 메모리에 적재되어 실행 되는 상태
- 프로세서
- CPU , 그래픽 프로세스 (실제 칩으로 되어있는 것들)
- 하드웨어 처리기라는 의미를 갖고있다. (하드웨어 적인 부분)
- 프로세스
- 프로그램에 대한 실행 (소프트웨어적인 부분)
더보기
프로세스는 프로그램이 메모리에 적재되어 실행되는 상태를 뜻한다. 프로세스의 모든 정보는 커널에 의해 관리되며 프로세스마다 고유한 번호를 가지게 된다.
프로세스 관리
- 프로세스의 생성에서 종료까지 관리는 모두 커널에 의해 이루어진다.
- 커널 영역에 프로세스 테이블을 만들고 프로세스 목록을 관리한다.
- 관리 내용
- 프로세스 생성, 실행, 일시중단 및 재개, 정보 관리, 프로세스 통신, 프로세스 동기화, 프로세스 중단, 프로세스 컨텍스트 스위칭
- 한 프로그램을 여러 번 실행시킬 때
- 프로그램 실행 시 마다 독립된 프로세스 생성 → 프로세스들을 프로그램의 다중 인스턴스라고 부른다.
- 각 프로세스에 독립된 메모리 공간을 할당
- 각 프로세스를 별개의 프로세스로 취급한다.
- 프로그램 실행 시 마다 독립된 프로세스 생성 → 프로세스들을 프로그램의 다중 인스턴스라고 부른다.
더보기
프로그램을 여러 번 실행 시킬땐, 다중 인스턴스화 된다.
각 프로세스 마다 독립된 메모리 공간을 할당받는다.
응용 프로그램의 자원 접근 문제
- 오늘날 운영체제는 다중 프로그래밍 운영체제이다.
- 응용 프로그램이 직접 컴퓨터 자원에 접근하면 충돌과 훼손이 발생한다.
- 다른 응용프로그램이 적재된 메모리를 훼손 할 수 있다.
- 다른 응용프로그램이 만든 파일 삭제 및 훼손이 가능하다.
- 응용 프로그램이 커널이 적재된 영역 훼손 가능
- 해결 방안
- 자원에 대한 모든 접근은 커널에만 부여한다.
- 응용 프로그램이 직접 컴퓨터 자원에 접근하면 충돌과 훼손이 발생한다.
- 구체적인 해결 방법
- 사용자 공간 → 응용 프로그램만 있는 공간
- 커널은 커널 공간에만 적재한다.
- CPU의 실행모드를 사용자 모드와 커널 모드로 분리한다.
- 응용 프로그램이 커널 기능을 이용할 때, 시스템 호출을 잉요해서만 커널 코드를 이용하도록 한다.
사용자 공간과 커널 공간
- 사용자 공간
- 응용 프로그램들이 적재되는 공간
- 커널 공간
- 커널 코드, 커널 데이터 등 커널에 의해 배타적으로 사용되는 공간
- 디바이스 드라이버를 포함한다.
- 분리하는 이유
- 커널 코드와 데이터를 악의적인 응용프로그램이나 코딩 실수로부터 지키기 위함이다.
더보기
프로그램이 직접 컴퓨터 자원에 접근하여 발생하는 충돌을 막기 위해 자원에 대한 접근은 커널에만 부여한다.
사용자 공간 크기의 의미
- 한 응용프로그램의 최대 크기 결정
- 프로그램 코드 + 데이터 (전역 변수) + 힙(동적 할당) + 스택
- 운영체제에서 사용자 공간이 2GB → 응용프로그램을 2GB 크기 이상 개발 X
- 사용자 공간의 주소 범위
- 운영체제가 설정한 사용자 공간의 주소 범위를 넘어설 수 없다.
- 바로 종료됨 (심각한 오류 예 : 블루스크린)
- 운영체제가 설정한 사용자 공간의 주소 범위를 넘어설 수 없다.
- 사용자 공간의 충돌 해결 → 가상 주소 공간을 물리 메모리에 매핑한다.
- 매핑 테이블 (주소 공간을 갖고 있는) → 운영체제가 소유하고 관리한다.
- 물리 메모리를 여러 프로그램의 사용자 공긴이 나누어 사용
- 실제로는 각 프로그램이 사용자 공간의 일부만 사용한다.
- 커널 공간 역시 물리 메모리에 매핑 될 수 있다.
- 물리 메모리가 작은 경우에는 하드 디스크에 저장하여 물리 메모리의 빈 영역을 확보한다. (가상 메모리 기법)
더보기
사용자 공간은 운영체제가 정한 범위 이상을 가질 수 없다.
해결 방법은 가상 주소 공간을 물리 메모리에 매핑하는 가상 메모리 기법 등이 있다.
사용자 모드와 커널 모드
- CPU는 사용자 모드와 커널 모드 중 한 모드로 실행한다.
- CPU 내부에 모드 레지스터 존재 → 모드 상태를 나타냄
- 사용자 모드
- CPU의 모드 비트 → 1
- CPU는 커널을 쓸 수 없다. → 응용 프로그램으로부터 커널 영역을 보호한다.
- 특권 명령 실행을 불허한다.
- 특권명령 ? 입출력 장치 등 하드웨어나 시스템 중단 등 시스템 관련 처리를 위해 설계된 특별한 명령
- 커널 모드
- CPU의 모드 비트 → 0
- CPU가 커널 공간에서 실행하는 중, 혹은 사용자 코드를 실행하는 중
- 특권 명령 사용 가능
- 사용자 모드에서 커널 모드로 전환하는 경우
- 시스템 호출과 인터럽트
- 시스템 호출
- 특별한 기계 명령에 의해 진행된다.
- 각 장비들마다 기계 명령이 다르다.
- 기계 명령이 CPU의 모든 비트를 커널 모드로 전환한다.
- 특별한 기계 명령에 의해 진행된다.
- 인터럽트
- CPU가 인터럽트를 수신하면 커널 모드로 자동으로 전환한다.
- CPU는 인터럽트 서비스 루틴을 실행한다.
- 인터럽트 서비스 루틴이 끝나면 사용자 모드로 자동 전환한다.
더보기
사용자 모드에서 커널 모드로 전환하는 경우는 시스템 콜이 일어나거나 인터럽트가 발생했을때이다.
CPU는 인터럽트를 수신하면 커널 모드로 자동으로 전환 후 서비스 루틴이 끝나면 사용자 모드로 자동 전환한다.
특권 명령
- 특별한 목적으로 설계된 CPU 명령
- 커널 모드에서만 실행된다.
- 종류
- I/O 명령
- Halt 명령
- CPU 작동 중지 (유휴 상태로 만듬)
- 인터럽트 플래그를 켜고 끄는 명령
- CPU가 인터럽트를 허용하거나 무시하도록 지시한다.
- 타이머 설정 명령
- 컨텍스트 스위칭 명령
- 메모리 지우기 명령
- 장치 상태 테이블 수정 등의 명령
- 사용자 모드와 커널 모드는 CPU에 의해 구현되는가, 운영체제에 의해 구현되는가
- 운영체제는 CPU 모드 레지스터를 이용하여 커널 영역을 지킨다.
- 모드는 CPU에 의해 구현, 운영체제가 활용할 수는 있다.
- 운영체제가 사용자 모드와 커널 모드로 나누는 이유는?
- 커널 공간에 대한 보안과 보호
- 사용자 응용프로그램은 사용자 모드에서 심각한 오류가 발생해도 시스템을 중단시키지는 못한다.
- 사용자 응용프로그램이 커널 코드를 호출하는 일이 있는가?
- 직접 커널 코드 호출 불가
- CPU가 커널 모드와 사용자 모드 중 어떤 모드로 많이 실행될까?
- 시스템 전체 통계를 보면 커널 모드에서 많이 실행된다.
- 장치 액세스의 경우가 많으면 커널 모드 시간 비율이 높아진다.
더보기
특권 명령은 커널 모드에서만 실행되는 CPU 명령이다.
커널
- 커널은 컴파일된 바이너리 형태, 하드디스크 특정 영역에 저장된다. (부팅 시에 커널 공간의 메모리에 적재된다.)
- 커널 코드는 함수들의 집합이다.
- 커널 모드에서 실행되는 함수들과 데이터들의 집합이다.
- 커널은 스스로 실행되는 프로세스가 아니다.
- 함수들의 단순 집합, 시스템 호출을 통해 호출되는 함수들이다.
- 시스템 호출과 인터럽트 서비스 루틴에 의해 커널 내 스케줄러 함수가 호출되어 실행된다.
- 함수들의 단순 집합, 시스템 호출을 통해 호출되는 함수들이다.
- 커널은 실행 중이 아니다.
- 커널은 프로세스도 스레드도 아니다.
- 커널 코드를 실행하고 있다 / 인터럽트 서비스 루틴이 실행되고 있다.
- 커널은 프로세스도 스레드도 아니다.
- 커널은 스택이나 힙을 갖지 않는다.
- 함수들의 단순 집합이기 때문 / 스레드가 가진다.
- 스레드마다 사용자 스택과 커널 스택을 소유한다.
- 스레드가 생성될 때 프로세스의 사용자 공간에 사용자 스택 할당 / 커널 공간에 커널 스택 할당 (시스템 호출을 통해)
더보기
커널은 컴파일 된 바이너리 형태의 함수들의 집합이다.
커널은 프로세스도 스레드도 아닌 단순 함수의 집합이다.
라이브러리
- 프로그램에서 활용하도록 미리 작성된 함수들이 컴파일 되어 바이너리 형태로 제공되는 파일
- 개발자는 라이브러리 활용이 없이는 응용프로그램 작성이 불가능하다.
- 활용되는 라이브러리는 2가지 유형을 갖는다.
- 표준 라이브러리
- 사용자가 작성하기 힘든 함수를 제공한다.
- 운영체제나 컴퓨터 하드웨어에 상관없이 이름과 사용법이 동일하다.
- 시스템 호출 라이브러리
- 시스템 호출 함수를 포함한다.
- 시스템 호출을 진행하여 커널 모드로 바꾸고 커널로 진입하여 커널에 만들어진 함수를 실행한다.
- 시스템콜 함수를 커널 API라고 부른다.
- 운영체제마다 시스템콜 함수의 이름이 서로 다르다.
- 표준 라이브러리
링킹
- 실행 파일이 만들어지는 과정이다.
- 응용프로그램이 사용자 공간에 적재 → 실행 파일 내 사용자 코드와 라이브러리 코드의 메모리 적재 → 사용자 전역 변수와 라이브러리의 전역 변수 모두 메모리에 적재 → 응용 프로그램은 사용자 모드로 실행 시작
함수 호출과 시스템 호출
- 함수 호출로 라이브러리를 활용한다.
- 사용자 공간에 적재된 함수가 사용자 공간에 적재된 다른 함수를 호출한다.
- 스택에 돌아올 주소, 매개변수를 전달 → 호출된 함수의 지역 변수를 생성한다.
- 사용자 공간에 적재된 함수의 주소로 점프
- 함수가 끝나면 함수를 호출한 곳으로 복귀시킨다.
- 사용자 공간에 적재된 함수가 사용자 공간에 적재된 다른 함수를 호출한다.
- 시스템 호출로 커널 코드를 실행한다.
- 커널에 작성된 함수 실행
- 시스템 호출 라이브러리에 포함된 시스템 호출 함수가 시스템 호출을 일으킨다.
- 기계 명령어를 실행한다.
- 커널 모드로 전환되고 커널 함수마다 고유 번호를 전달한다.
- 커널의 시스템 호출 핸들러를 실행한다.
- 커널 함수의 고유 번호 분석, 해당 커널 함수 호출
- 리턴할 때 사용자 모드로 전환, 사용자 프로그램으로 복귀
- 커널에 작성된 함수 실행
시스템 호출
- 사용자 공간의 코드에서 커널 서비스를 요청하는 과정이다.
- 커널 콜 / 트랩 이라고도 불린다.
- 응용프로그램에서 커널 기능을 활용하도록 만들어 놓은 기능이다.
- 운영체제는 시스템 호출 라이브러리를 제공한다.
- 시스템 호출 함수 혹은 커널 API를 포함한다.
- 대략 200개 이상의 시스템 호출 함수가 존재한다.
- 시스템 호출을 일으키는 기계 명령
- CPU마다 시스템 호출을 실행하는 특별한 기계 명령을 제공한다.
fread()와 read() 의 비교
- 시스템 호출은 함수 호출에 비해 많은 시간 비용이 든다.
- 시스템 호출을 많이 할수록 프로그램 실행 속도가 저하된다.
- fread() ⇒ 1번의 시스템 호출
- read() ⇒ 10번의 시스템 호출 (느리고 비효율적이다.)
프로세스 구성
- 코드 영역
- 프로그램 코드가 적재되는 영역
- 데이터 영역
- 프로그램에서 고정적으로 만든 변수 공간
- 프로세스 적재시 할당, 종료시 소멸
- 힙 영역
- 프로세스의 실행 도중 동적으로 사용할 수 있도록 할당된 공간
- 스택 영역
- 함수가 실행될 때 사용될 데이터를 위해 할당된 공간
- 함수 호출 외에 프로세스에서 필요시 사용이 가능하다.
프로세스 주소 공간
- 실행중에 접근할 수 있도록 허용된 주소의 최대 범위 (범위를 벗어나지 않음)
- 논리공간이다. (가상공간)
- 0번지에서 시작하여 연속적인 주소를 가진다. (실제는 0번지가 아니라고 볼 수 있다.)
- 32비트 CPU의 경우 4GB 까지 크기를 가질 수 있다.
- 프로세스 크기 : 적재된 코드 + 전역 변수 + 힙 영역에서 할당받은 동적 메모리 공간 + 스택 영역에 현재 저장된 데이터 크기 로 매번 달라질 수 있다.
커널 공간
- 시스템 호출을 통해 이용하는 커널 공간
- 커널 코드 , 커널 데이터, 커널 스택(커널 코드가 실행될 때만) 이 존재한다.
결론
- 프로세스의 코드와 데이터는 실행 파일에 결정된 상태로 코드 영역과 데이터 영역에 적재된다. → 실행 중에 크기가 변하지 않는다. (메모리를 아껴써야 한다.)
- 프로세스는 사용자 공간의 최대 범위까지 동적할당 받으면서 힙 영역과 스택 영역을 늘려갈 수 있다.
커널 공간의 의미
- 각 프로세스는 독립된 사용자공간을 소유하고 커널 공간을 공유한다.
- 프로세스가 사용자 코드에서 시스템 호출을 통해 커널 코드를 실행할 때 커널 공간을 사용한다.
- 결론
- 프로세스마다 각각 사용자 주소 공간이 존재한다.
- 시스템 전체에는 하나의 커널 주소 공간이 있다.
- 모든 프로세스는 커널 주소 공간을 공유한다.
프로세스의 주소 공간
- 프로세스의 주소 공간은 가상 공간이다.
- 프로세스에서의 0번지는 가상 주소 0번지를 의미한다.
- 가상 주소는 0번지부터 시작된다.
- 코드 주소 변수 주소 등등은 모두 가상 주소이다.
- 프로세스의 주소 공간은 각 프로세스마다 주어지고, 가상 주소가 물리 주소로 매핑되기 때문에 물리 메모리에서는 충돌하지 않는다.
'학교공부' 카테고리의 다른 글
프로세스랑 스레드는 무슨관계?? ;ㅅ; (0) | 2023.08.24 |
---|---|
정보통신 개론 03-27 (정리) 컴퓨터, 부울대수 , 데이터표현 (0) | 2023.04.09 |
네트워크 일반 03-22 (정리) OSI 7계층과 프로토콜 (0) | 2023.04.07 |
운영체제 이론 03-21 (정리) (0) | 2023.03.31 |
정보통신 개론 03-20 (정리) 정보통신 시스템의 구성 (0) | 2023.03.31 |
Comments, Trackbacks