링커 옵션중에

hoya7256의 이미지

링커 옵션중에 메모리 멥을 볼수 있는 옵션이 있습니다.

ld -M 파일명

하면 볼수가 있죠.

디폴트 0번지를 중심으로 상대번지들로 구성된 것을 볼수 있는데요.

저는 반대로 메모리 멥을 직접 할당하고 싶습니다.

즉 링크시 절대번지들을 주고싶은것이죠.

이렇게 하고자 하는 이유는

프로그램의 특정 함수들을 다른 메모리에서 돌리고 싶어서입니다.

다시 말해 A라는 프로그램중에서 B()라는 함수는 A가 돌고있는 (예를 들어) SDRAM이 아니라 SRAM에서 돌리고 싶은 것입니다.

그래서 혹시 링크 과정에서 특정 함수에 절대번지를 지정해 줌으로써 가능하지 않을까 해서입니다.

고수님들의 빠른 답변 부탁드립니다.

flyduck의 이미지

link를 할 때 코드나 데이터의 위치를 바꾸는 방법은 있습니다. ld에서 --section-start 옵션으로 각 section의 주소를 지정할 수도 있고, 또는 줄여서 -Ttext -Tdata 등의 옵션을 사용할 수도 있습니다. 나아가서 linker script를 작성하여 세세하게 위치를 지정하는 것도 가능합니다. 두 함수를 다른 section에 넣고 각 section의 위치를 원하는 주소로 설정할 수 있습니다.

그렇지만 이런 모든 것이 가상 메모리 하에서 동작하는 프로그램이 특정 주소에서 실행하도록 만들어주지 않습니다. :-)

Freedom is another word for nothing left to lose,
Nothing doesn't mean nothing if it ain't free.

IsExist의 이미지

절대주소는 오직 os kernel만 접근 가능합니다.

현대적인 os는 선접형 방식이라 일개 프로그램이 절대주소를 접근하게 놔두지 않습니다.

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

hoya7256의 이미지

답변 감사드립니다.

다른 방법을 찾아봐야겠네요. ㅠㅠ

girneter의 이미지

IsExist wrote:
절대주소는 오직 os kernel만 접근 가능합니다.

현대적인 os는 선접형 방식이라 일개 프로그램이 절대주소를 접근하게 놔두지 않습니다.

절대주소를 os kernel 만 접근가능하게 하는것과
os 가 선점형 방식인거랑은 아무런 상관이 없습니다

선점형이란 말은 process scheduling 쪽 문제이니까요

그리고 리눅스와 같은 시스템에서 user process 는 절대주소에
바로 접근할 방법이 없긴한데요

보아하니 embeded 환경인거 같은데
OS 가 따로 user mode 를 두지 않고 모든 작업을 kernel mode
에서 하는 OS라면
절대주소를 바로 사용하는게 가능하지요

그런데 함수를 굳이 SRAM 에서 실행하려는 이유는
빠른 실행을 위해서인가요?
정말 빨라지나?

개념없는 초딩들은 좋은 말로 할때 DC나 웃대가서 놀아라. 응?

hoya7256의 이미지

embeded 환경 맞구요.
현재 SDRAM을 사용할수 없어서
용량문제로 70ns 16M SRAM에서 돌리고 있는데 성능이 안나오네요.
그래서 7ns 512K SRAM에서 특정 프로그램만 돌리려고 하는 상태입니다.

지금 사용하는 커널이 2.6버전인데요.
어떻게하면 모든 작업을 커널 모드에서 사용이 가능할까요?

flyduck의 이미지

원하는 작업을 할려면 리눅스 커널의 메모리 관리자를 뜯어고치는 수밖에 없습니다.

일단 두가지 종류의 메모리가 있다고 했는데, 두 메모리가 연속적으로 되어 있다면 서로 다른 zone으로 나누고, 연속적이지 않다면 Non Uniform Memory Architecture를 이용해서 서로 다른 zone으로 나누어야 합니다. 그래서 느린 메모리와 빠른 메모리가 서로 다른 zone에 있도록 만듭니다. 느린 메모리는 일반적인 용도를 사용하고, 빠른 메모리는 특별한 요구가 있는 경우에만 사용하도록 설계를 합니다.

다음으로 언제 빠른 메모리를 할당해줄 것인가인데, priority가 어느 수준보다 높은 프로세스가 메모리를 요청할 때라든지, mlock()같은 특별한 함수가 불렸을 때라든지, 특정한 uid나 gid같이 조건을 만들어서 해당 조건에 해당할 때 메모리 할당이 빠른 메모리 zone에서 일어나도록 해주면 원하는 효과를 얻을 수 있을 것입니다.

Freedom is another word for nothing left to lose,
Nothing doesn't mean nothing if it ain't free.

girneter의 이미지

hoya7256 wrote:

어떻게하면 모든 작업을 커널 모드에서 사용이 가능할까요?

모든 작업을 커널모드에서 하는건 간단합니다
커널 프로그래밍을 해서 코드를
커널에 넣거나 모듈로 만들어서 올리면 되지요

그런데 님의 문제로 돌아와서
이 모듈을 insmod 로 올릴때 특정영역에 올리는게
가능한지(아마 가능할테지만)
어떻게 하는건지,
그리고 그렇게 text 영역을 SRAM 에 올리면 정말
성능이 좋아지는지는
제 내공이 형편없는지라 모르겠습니다

고수분이 갈쳐주세요

개념없는 초딩들은 좋은 말로 할때 DC나 웃대가서 놀아라. 응?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.