리눅스에서 프로그램이 돌아가는 실행 영역은 유저모드와 커널모드로 나뉩니다. 일반 어플리케이션이 실행되는 영역이 유저 모드이고, 커널 모드는 하드웨어를 직접 관리하는 프로그램들의 영역입니다. 말하자면 OS의 영역인 것이죠
실행 영역이 나뉘어져 있는 이유는 일반 어플리케이션이 하드웨어에 직접 접근을 하지 못하게 하기 위함입니다. 하지만 유저모드의 프로그램들이 커널모드에 전혀 접근하지 못한다면 제대로 된 프로그램들을 만들 수 없겠죠.. 그래서 커널은 유저 모드의 프로그램들이 커널에 간접적으로 접근할 수 있도록 하기위해 시스템콜이라는 함수들을 제공합니다.
일반 프로그램들이 하드웨어에 접근하기 위해서는 시스템콜 함수를 이용해 커널에게 하드웨어 사용을 '요청'하고, 커널이 이것을 수락해서 하드웨어를 제어해주는 겁니다
쉘과 직접적인 어떤 관계가 있는건 아닌 것 같습니다. 쉘 역시 일반 유저가 커널에 접근하기 위한 창구같은 것이니까요
저는 시스템 콜을 '커널을 거쳐서 해야하는 작업,
저는 시스템 콜을 '커널을 거쳐서 해야하는 작업, 동작' 정도로 이해하고 있습니다. 커널을 거쳐서 해야만 하는 이유는 권한, 보안 문제를 안전하게 처리하기 위해서라고 알고 있습니다.
파일, 장치 접근이나 프로세스 생성, 관리가 대표적인 시스템 콜입니다.
http://en.wikipedia.org/wiki/System_call#Categories_of_system_calls
그럼 어떤게 시스템 콜이 아닌가? 시스템 콜이 아닌 코드를 userland 코드라고 부르는 것 같은데 외부에 영향을 주지 않는 코드? 그런 것들인 것 같습니다.
3 + 4
이런게 아마 시스템 콜이 아니겠지요.
다음 분이 진짜 설명을 해주실 겁니다.
바쁘신데 소중한 지식 공유 감사합니다^^ 크게
바쁘신데 소중한 지식 공유 감사합니다^^
크게 보면 말씀하신 게 맞는 것 같아요!
새해 복 많이 받으시구 감기 조심하세요^ㅡ^
리눅스에서 프로그램이 돌아가는 실행 영역은 유저모드와
리눅스에서 프로그램이 돌아가는 실행 영역은 유저모드와 커널모드로 나뉩니다. 일반 어플리케이션이 실행되는 영역이 유저 모드이고, 커널 모드는 하드웨어를 직접 관리하는 프로그램들의 영역입니다. 말하자면 OS의 영역인 것이죠
실행 영역이 나뉘어져 있는 이유는 일반 어플리케이션이 하드웨어에 직접 접근을 하지 못하게 하기 위함입니다. 하지만 유저모드의 프로그램들이 커널모드에 전혀 접근하지 못한다면 제대로 된 프로그램들을 만들 수 없겠죠.. 그래서 커널은 유저 모드의 프로그램들이 커널에 간접적으로 접근할 수 있도록 하기위해 시스템콜이라는 함수들을 제공합니다.
일반 프로그램들이 하드웨어에 접근하기 위해서는 시스템콜 함수를 이용해 커널에게 하드웨어 사용을 '요청'하고, 커널이 이것을 수락해서 하드웨어를 제어해주는 겁니다
쉘과 직접적인 어떤 관계가 있는건 아닌 것 같습니다. 쉘 역시 일반 유저가 커널에 접근하기 위한 창구같은 것이니까요
말씀하신 fork와 execl 함수역시, 커널이 자식 프로세스를 형성하거나 새로운 프로세스를 실행시키도록 '요청'하는 함수입니다.
+ p.s. '시스템 콜이 무엇인가요'는 구글에 물어봐도 답변이 자세히 나온답니다.
바쁘신데 지식공유 감사합니다! 너무 설명을 쉽고 잘
바쁘신데 지식공유 감사합니다!
너무 설명을 쉽고 잘 풀어서 해주셔서 정말 이해가 됬네요!
정말정말 감사합니다^ㅡ^
초보리눅서로서 감사의 말씀을. ..ㅎㅎ
새해 복 많이 받으세요^^
댓글 달기