반응형

Linux!

 

많은 서버의 os가 리눅스 기반이기 때문에 대부분의 개발자들이 거의 필수적으로 사용하는 운영체제입니다.

앞에서 배웠던 운영체제 이론을 기반으로, 리눅스에서는 운영체제가 어떻게 구현되어있는지 알아보겠습니다.

 

1. 리눅스의 역사

 

1) 리누스 토발즈가 개발

2) 유닉스(UNIX)와 유사한 운영체제

3) GNU 프로젝트 산출물리눅스 커널이 통합됨

 

2. 리눅스의 특징

1) 모든 시스템을 파일 시스템처럼 다룸

2) 서버, 클라우딩 컴퓨팅에 많이 사용됨(무료)

3) C(ANSI C)언어를 기반으로 제작됨

4) UNIX 계열의 OS(다중사용자, 다중 작업 지원)

 

3. 리눅스와 파일 시스템

 

1) 리눅스의 파일 탐색

  리눅스는 A드라이브, C드라이브 같은 네임스페이스가 없고 전역 네임스페이스를 사용한다. 모든 디렉토리는 디렉토리 엔트리(dentry)라는 구조체를 포함하며, 디렉토리 엔트리에는 파일, Sub 디렉토리에 대한 inode 정보들이 포함되어 있다.

 

2) 하드링크와 소프트링크

  리눅스에서 파일을 복사하거나 링크를 거는 방법에는 세 가지가 있다.

  2.1) 복사(cp) :

    파일을 복사한다. 원본 파일이 2개가 된다.

  2.2) 하드 링크 : 

    파일 원본은 하나이나, 원본 inode 구조체를 가리키는 링크를 추가적으로 만든다. 즉, 동일한 Inode이나 파일 이름만 다른 구조를 갖는다. 원본 파일을 지운다고 해도 하드링크에는 영향을 미치지 않는다.

  2.3) 소프트링크 : 

    파일 원본은 하나이고, 새로운 Inode 구조체를 만들어 가리킨다. 새로운 Inode의 구조체가 다시 원본 파일을 가리키데 된다. 따라서, 원본 파일을 삭제하면 접근이 불가능하다.(Windows의 바로가기와 동일)

4. 리눅스의 시스템 콜, C라이브러리

* 시스템 콜 : 운영체제 리소스나 서비스 요청을 위해, 사용자 영역에서 커널 영역으로 들어가는 함수, 리눅스가 C언어로 작성되어 있으므로, 시스템 콜도 C언어로 작성되어 있다.

 

1) 시스템 콜의 구현

→ 시스템 콜이 호출되면, 소프트웨어 인터럽트 명령을 호출하면서 0x80을 넘겨준다. 

eax 레지스터에는 시스템 콜 번호를, ebx 레지스터에는 시스템 콜에 해당하는 인자값을 전달한다.
→ CPU가 사용자 모드를 커널 모드로 바꿔준다.
→ Interrupt Descriptor Table에서 0x80에 해당하는 주소 함수를 찾아서 실행한다.
→ system_call() 함수에서 eax에 저장되어있는 번호에 해당하는 시스템 콜 함수로 이동한다.
→ 해당 함수 실행 후, 사용자 모드로 변경한다.

 

2) C 라이브러리 
- 유닉스 : libc
- 리눅스 : GNU libc

 

* C 컴파일러

 

* Shell에서 C파일을 실행시키는 법 :

1) C컴파일러로 파일을 컴파일한다.

    (gcc -o [파일명] [실행파일명])

2) 1)번의 결과로 생성된 실행파일을 실행한다.

 

* ABI : Application Binary Interface
→ 함수 실행 방식, 레지스터 활용, 시스템 콜 실행, 라이브러리 링크 방식 등을 정의

 

반응형

+ Recent posts