책의 맨 앞 서론은 꼭 읽는게 좋습니다
- 운영체제가 제공하는 서비스는 무엇이고
- 어떤 방식으로 서비스가 제공되는지
- 이 서비스들이 어떻게 디버깅 되며 시스템 설계를 위한 다양한 어떤 방법들을 사용되는지 고려한다.
- 마지막으로 운영체제가 어떻게 만들어지고 컴퓨터가 운영체제를 구동시크는 방법에 대해 설명한다.
이중에 1,2번만 제대로 이해했어도 내가 핀토스를 만드는 의미를 더 정확히 알 수 있었을 텐데
2.1 운영체제 서비스
- 사용자 인터페이스
- 프로그램 수행
- 입출력 연산
- 파일 시스템 조작
- 통신
- 오류 탐지
- 자원 할당
- 회계
- 보호와 보안
2.3 시스템 호출 (system call)
핀토스 2차 프로젝트이다. 이 부분은 나름 열심히 했었는데 당시에는 의미를 이해하지 못했다 2장이랑 연관성을 못찾은 내가 바보인듯...
시스템 호출은 운영체제에 의해 사용 가능하게 된 서비스에 대한 인터페이스를 제공한다. (운영체제에 의해 사용 가능하게 된 서비스 ... 2.1장의 항목들을 말하는거 같다.) 하드웨어에 직접 접근하는 저수준 작업은 어셈블리 명령을 사용하여 작성되어야 한다 함. (핀토스에서 어셈블리 내용 이해 못했는데 지금 보니까 특정 레지스터에 값올리고 인터럽트나 다른 시스템 콜을 호출하는 과정이었던거 같다.) 일반적으로 C와 C++ 언어로 작성된 루틴 형태로 제공된다.
시스템 호출 사용 예시
파일 A를 읽어서 파일B로 복사하는 프로그램을 가정해보자
-
콘솔로 파일 이름을 얻었다 치자
-
각 파일을 열어야 한다 (시스템 호출)
2-1. 파일 열다가 에러시 콘솔에 메시지 출력 (시스템 호출)
2-2. 비정상적 종료 (시스템 호출) -
다른 파일 열기 위해 현재 프로그램 중단 (시스템 호출)
-
이제 A파일을 읽어서 출력 파일에 기록한다 (시스템 호출)
그냥 보니까 시스템 호출 아닌게 없네 ㅋㅋㅋ... 원래 시스템을 사용하려면 모든게 다 시스템 호출인가요... 그럼 시스템 호출 아닌게 없는거 아닌가..... 주변 기기 사용하면 아닐려나
즉 간단한 프로그램이라도 운영체제의 기능을 아주 많이 사용하게 된다 !!!! 몰랐다 시스템 콜은 그냥 가끔 사용하는 건줄 ...진짜 겉모습만 컴공생인듯 ㅋㅋ 대부분의 응용 개발자들은 응용 프로그래밍 인터페이스 API에 따라 프로그램을 설계한다. API는 각 함수에 전달되어야 할 매개변수들과 프로그래머가 기대할 수 있는 반환 값 포함하여 응용 프로그래머가 사용 가능한 함수의 집합을 명시한다. 즉 API를 구성하는 함수들은 보통 응용 프로그래머를 대신하여 실제 시스템 호출을 호출한다!!
이렇게 대신하는 이유는 API에 따라 프로그램을 설계하는 응용 프로그래머는 자신의 프로그램이 같은 API를 지원하는 어느 시스템이건 컴파일 되고 실행된다는 것을 기대할 수 있다. 즉 실제 시스템 호출은 종종 좀 더 자세한 명세가 필요하고 프로그램 상에서 작업하기가 응용 프로그래머에게 가용한 API보다 더 어렵다.
프로그래밍 언어들을 위한 실행시간 지원 시스템(?? 컴파일러와 함께 제공되는 라이브러리에 내장된 함수의 집합, 이게 뭐지? 그냥 라이브러리들 말하는건가...) 운영체제가 제공하는 시스템 호출 인터페이스에 대한 연결로서 동작하는 시스템 호출 인터페이스를 제공한다. 이 시스템 호출 인터페이스는 API 함수의 호출을 가로채어 필요한 운영체제 시스템 호출을 부른다.
[시스템 호출 인터페이스 설명] https://twinjh.tistory.com/15
시스템 호출(System call) 정의 : 프로세스가 운영체제와 통신하기 위한 유일한 방법. 앞에서 운영체제가 제공하는 서비스들을 살펴보았는데, 이런 서비스에 대한 프로그래밍 인터페이스(Programming Interface)를 제공한다.
호출자는 시스템 호출이 어떻게 구현되고 실행 중 무슨 작업을 하는지 아무것도 알 필요가 없다. 단지 호출자는 API를 준수하고 시스템 호출의 결과로서 운영체제가 무엇을 할 것인지만 이해하면 된다.
시스템 호출시 매개 변수 전달 방법
- 매개변수를 레지스터 내에서 전달
- 레지스터로 메모리 내의 블록, 테이블의 주소 전달
- 매개변수를 직접 스택에 넣는다.
2.5 시스템 프로그램(System Programs)
논리적인 컴퓨터 계층 구조를 기억해보자. 최하위 수준은 하드웨어이고, 당므은 운영체제, 그 다음은 시스템 프로그램, 마지막은 응용 프로그램이다.
이때 시스템 프로그램은 시스템 유틸리티(system utility)로도 알려진, 프로그램 개발과 실행을 위해 보다 편리한 환경을 제공한다. 이들 중 몇몇은 단순히 시스템 호출에 대한 사용자 인터페이스 이며, 나머지는 훨씬 더 복잡하다...
아래 몇가지 범주로 구분 할 수 있다.파일 관리 : 파일 ,디렉토리 생성,삭제,복사,개명, 인쇄,덤프,리스트
-
상태 정보 : 날짜,시간, 메모리 가용량, 디스크 공간등등
-
파일 변경 : 텍스트 에디터
-
프로그래밍 언어지원 : 프로그래밍 언어들에 대한 컴파일러, 어셈블러, 디버거 및 해석기등등
-
프로그램 적재와 수행 : abosolute loader , relocatable loader , linkage editor, overlay loader등등, 디버깅 시스템
-
통신 : 프로세스,사용자, 컴퓨터 시스템들 사이에 가상 접속을 위한 기법들 제공
-
백그라운드 서비스 : 이 부분은 나에게 생소하다 모든 범용 시스템은 부팅시 특정 시스템프로그램을 시작시킬수 있는 방법이 있다. 일부는 자신의 일을 완료시 종료하고 일부는 시스템 정지시 까지 계속해서 실행되는 프로세스도 존재한다. 항상 실행되는 시스템은 서비스,서브시스템, 디먼으로 알려져있다. 2.4.5절 예시로(난 정리 안했음..) 네트워크 디먼이 있다. 시스템은 연결 요청을 올바른 프로세스에게 연결해 주기 위하여 네트워크 연결을 청취하는 서비스가 필요하였다. 다른 예시로 지정된 스케줄에 따라 프로세스를 시작시키는 프로세스 스케줄러, 시스템 오류 감시 서비스 및 출력 서버가 있다. 시스템은 전형적으로 수십개의 디먼을 갖고 있다. 게다가 운영체제가 중요한 활동을 커널 문맥에서가 아니라 사용자 문맥에서 실행해야 하는 경우, 디먼을 이용해서 해당 작업을 수행할 수 있다.
2.8 운영체제 디버깅
디버깅은 넓게는 하드웨어와 수프트웨어에서의 시스템의 오류를 발견하고 수정하는 행위이다. 성능 문제는 버그로 간주되므로 시스템에서 처리 중에 발생하는 병목 현상을 제거하여 성능을 향상시키려는 성능 조정(performance tuning)도 디버깅에 포함된다.
후기: 뒤에 연습문제와 프로젝트들을 해본다면 매우 유익할것 같다... 음 할게 너무 많음..
'취업,면접 대비' 카테고리의 다른 글
면접 대비 운영체제 공부 (abraham 4장 thread) (0) | 2019.12.09 |
---|---|
면접 대비 운영체제 공부 (abraham 3장 Process) (0) | 2019.12.08 |
면접 대비 운영체제 공부 ( abraham 1장) (0) | 2019.12.06 |
면접 대비 자료구조 공부 ( 호로비츠 6장 그래프) (0) | 2019.12.04 |
면접 대비 자료구조 공부 (호로비츠 5장 트리) (0) | 2019.12.03 |